PromucFlow_constructor/app/client/src/reducers/uiReducers/gitSyncReducer.ts
Rudraprasad Das c169d48888
chore: git mod - minor fixes (#38563)
## Description
- Fixes initial loading state for status
- Includes module instances and source module count
- Fixes discard flow

## Automation

/ok-to-test tags="@tag.Git"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/12692930817>
> Commit: 6689c8e113bc4795cecd533fe5b7eff6ee221283
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=12692930817&attempt=4"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Git`
> Spec:
> <hr>Fri, 10 Jan 2025 08:32:22 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
	- Introduced a new focus on source modules instead of packages
	- Enhanced tracking of module instances and source module changes

- **Bug Fixes**
- Updated status change calculations to more accurately reflect module
modifications
	- Improved handling of artifact identification in discard operations

- **Refactor**
- Renamed and restructured various status-related interfaces and
functions
- Modified selectors and reducers to support new module tracking
approach

- **Chores**
	- Updated type definitions and selector implementations
	- Removed deprecated package-related tracking mechanisms

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-10 12:16:55 +01:00

913 lines
25 KiB
TypeScript

import { createReducer } from "utils/ReducerUtils";
import type { ReduxAction } from "actions/ReduxActionTypes";
import {
ReduxActionErrorTypes,
ReduxActionTypes,
} from "ee/constants/ReduxActionConstants";
import type { GitConfig, MergeStatus } from "entities/GitSync";
import { GitSyncModalTab } from "entities/GitSync";
import type { GetSSHKeyResponseData, SSHKeyType } from "actions/gitSyncActions";
import type { PageDefaultMeta } from "ee/api/ApplicationApi";
export enum GitSettingsTab {
GENERAL = "GENERAL",
BRANCH = "BRANCH",
CD = "CD",
}
const initialState: GitSyncReducerState = {
isGitSyncModalOpen: false,
isCommitting: false,
isCommitSuccessful: false,
activeGitSyncModalTab: GitSyncModalTab.GIT_CONNECTION,
isErrorPopupVisible: false,
isFetchingGitStatus: false,
isFetchingMergeStatus: false,
globalGitConfig: { authorEmail: "", authorName: "" },
branches: [],
fetchingBranches: false,
localGitConfig: { authorEmail: "", authorName: "" },
showBranchPopup: false,
isDiscarding: false,
isFetchingLocalGitConfig: false,
isFetchingGlobalGitConfig: false,
isMerging: false,
tempRemoteUrl: "",
showRepoLimitErrorModal: false,
isDisconnectGitModalOpen: false,
disconnectingGitApp: {
id: "",
name: "",
},
isSwitchingBranch: false,
switchingToBranch: null,
isDeploying: false,
protectedBranchesLoading: false,
protectedBranches: [],
isUpdateProtectedBranchesLoading: false,
isAutocommitModalOpen: false,
togglingAutocommit: false,
triggeringAutocommit: false,
pollingAutocommitStatus: false,
gitMetadata: null,
gitMetadataLoading: false,
isGitSettingsModalOpen: false,
activeGitSettingsModalTab: GitSettingsTab.GENERAL,
};
const gitSyncReducer = createReducer(initialState, {
[ReduxActionTypes.SET_IS_GIT_SYNC_MODAL_OPEN]: (
state: GitSyncReducerState,
action: ReduxAction<{
isOpen: boolean;
tab: GitSyncModalTab;
isDeploying: boolean;
}>,
) => {
const activeGitSyncModalTab = action.payload.tab;
const isDeploying = action.payload.isDeploying || false;
return {
...state,
isGitSyncModalOpen: action.payload.isOpen,
activeGitSyncModalTab,
connectError: null,
commitAndPushError: null,
discardError: null,
pullError: null,
mergeError: null,
pullFailed: false, // reset conflicts when the modal is opened
gitImportError: null,
isDeploying,
};
},
[ReduxActionTypes.COMMIT_TO_GIT_REPO_INIT]: (state: GitSyncReducerState) => ({
...state,
isCommitting: true,
isCommitSuccessful: false,
}),
[ReduxActionTypes.COMMIT_TO_GIT_REPO_SUCCESS]: (
state: GitSyncReducerState,
) => ({
...state,
isCommitting: false,
isCommitSuccessful: true,
connectError: null,
commitAndPushError: null,
pullError: null,
mergeError: null,
discardError: null,
}),
[ReduxActionErrorTypes.COMMIT_TO_GIT_REPO_ERROR]: (
state: GitSyncReducerState,
action: ReduxAction<unknown>,
) => ({
...state,
isCommitting: false,
commitAndPushError: action.payload,
}),
[ReduxActionTypes.CLEAR_COMMIT_ERROR_STATE]: (
state: GitSyncReducerState,
) => ({
...state,
commitAndPushError: null,
}),
[ReduxActionTypes.CLEAR_COMMIT_SUCCESSFUL_STATE]: (
state: GitSyncReducerState,
) => ({
...state,
isCommitSuccessful: false,
}),
[ReduxActionTypes.PUSH_TO_GIT_SUCCESS]: (state: GitSyncReducerState) => ({
...state,
isPushingToGit: false,
isPushSuccessful: true,
}),
[ReduxActionErrorTypes.PUSH_TO_GIT_ERROR]: (
state: GitSyncReducerState,
action: ReduxAction<unknown>,
) => ({
...state,
isPushingToGit: false,
commitAndPushError: action.payload,
}),
[ReduxActionTypes.SHOW_ERROR_POPUP]: (
state: GitSyncReducerState,
action: ReduxAction<{ isVisible: boolean }>,
) => ({
...state,
isErrorPopupVisible: action.payload.isVisible,
}),
[ReduxActionTypes.FETCH_GLOBAL_GIT_CONFIG_INIT]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingGlobalGitConfig: true,
connectError: null,
commitAndPushError: null,
pullError: null,
mergeError: null,
discardError: null,
}),
[ReduxActionTypes.UPDATE_GLOBAL_GIT_CONFIG_INIT]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingGlobalGitConfig: true,
connectError: null,
commitAndPushError: null,
pullError: null,
mergeError: null,
discardError: null,
}),
[ReduxActionTypes.FETCH_GLOBAL_GIT_CONFIG_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<GitConfig>,
) => ({
...state,
globalGitConfig: action.payload,
isFetchingGlobalGitConfig: false,
}),
[ReduxActionTypes.UPDATE_GLOBAL_GIT_CONFIG_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<GitConfig>,
) => ({
...state,
globalGitConfig: action.payload,
isFetchingGlobalGitConfig: false,
}),
[ReduxActionErrorTypes.UPDATE_GLOBAL_GIT_CONFIG_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingGlobalGitConfig: false,
}),
[ReduxActionErrorTypes.FETCH_GLOBAL_GIT_CONFIG_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingGlobalGitConfig: false,
}),
[ReduxActionTypes.FETCH_BRANCHES_INIT]: (state: GitSyncReducerState) => ({
...state,
fetchingBranches: true,
connectError: null,
commitAndPushError: null,
pullError: null,
mergeError: null,
discardError: null,
}),
[ReduxActionTypes.FETCH_BRANCHES_SUCCESS]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any[]>,
) => ({
...state,
branches: action.payload,
fetchingBranches: false,
}),
[ReduxActionErrorTypes.FETCH_BRANCHES_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
fetchingBranches: false,
}),
[ReduxActionTypes.FETCH_LOCAL_GIT_CONFIG_INIT]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingLocalGitConfig: true,
connectError: null,
commitAndPushError: null,
pullError: null,
mergeError: null,
discardError: null,
}),
[ReduxActionTypes.UPDATE_LOCAL_GIT_CONFIG_INIT]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingLocalGitConfig: true,
connectError: null,
commitAndPushError: null,
pullError: null,
mergeError: null,
discardError: null,
}),
[ReduxActionTypes.FETCH_LOCAL_GIT_CONFIG_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<GitConfig>,
) => ({
...state,
localGitConfig: action.payload,
isFetchingLocalGitConfig: false,
useGlobalProfile: action.payload?.useGlobalProfile,
}),
[ReduxActionTypes.UPDATE_LOCAL_GIT_CONFIG_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<GitConfig>,
) => ({
...state,
localGitConfig: action.payload,
isFetchingLocalGitConfig: false,
}),
[ReduxActionErrorTypes.UPDATE_LOCAL_GIT_CONFIG_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingLocalGitConfig: false,
}),
[ReduxActionErrorTypes.FETCH_LOCAL_GIT_CONFIG_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingLocalGitConfig: false,
}),
[ReduxActionTypes.FETCH_GIT_STATUS_INIT]: (state: GitSyncReducerState) => ({
...state,
isFetchingGitStatus: true,
connectError: null,
pullError: null,
mergeError: null,
}),
[ReduxActionTypes.FETCH_GIT_STATUS_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<GitStatusData | undefined>,
) => ({
...state,
gitStatus: action.payload,
isFetchingGitStatus: false,
}),
[ReduxActionErrorTypes.FETCH_GIT_STATUS_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingGitStatus: false,
}),
[ReduxActionErrorTypes.DISCONNECT_TO_GIT_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
isDisconnectingGit: false,
}),
[ReduxActionErrorTypes.CONNECT_TO_GIT_ERROR]: (
state: GitSyncReducerState,
action: ReduxAction<unknown>,
) => ({
...state,
connectError: action.payload,
isImportingApplicationViaGit: false,
}),
[ReduxActionTypes.FETCH_MERGE_STATUS_INIT]: (state: GitSyncReducerState) => ({
...state,
isFetchingMergeStatus: true,
connectError: null,
commitAndPushError: null,
mergeStatus: null,
pullError: null,
mergeError: null,
discardError: null,
}),
[ReduxActionTypes.FETCH_MERGE_STATUS_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<unknown>,
) => ({
...state,
mergeStatus: action.payload,
isFetchingMergeStatus: false,
}),
[ReduxActionErrorTypes.FETCH_MERGE_STATUS_ERROR]: (
state: GitSyncReducerState,
) => ({
...state,
isFetchingMergeStatus: false,
}),
[ReduxActionTypes.RESET_MERGE_STATUS]: (state: GitSyncReducerState) => ({
...state,
mergeStatus: null,
}),
[ReduxActionTypes.GIT_PULL_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<MergeStatus>,
) => ({
...state,
pullFailed: false,
pullMergeStatus: action.payload,
pullInProgress: false,
}),
[ReduxActionTypes.GIT_PULL_INIT]: (state: GitSyncReducerState) => ({
...state,
pullMergeStatus: null,
pullInProgress: true,
}),
[ReduxActionErrorTypes.GIT_PULL_ERROR]: (
state: GitSyncReducerState,
action: ReduxAction<unknown>,
) => ({
...state,
pullInProgress: false,
pullFailed: true,
pullError: action.payload,
}),
[ReduxActionTypes.RESET_PULL_MERGE_STATUS]: (state: GitSyncReducerState) => ({
...state,
pullFailed: false,
}),
[ReduxActionTypes.MERGE_BRANCH_INIT]: (state: GitSyncReducerState) => ({
...state,
isMerging: true,
mergeError: null,
}),
[ReduxActionTypes.MERGE_BRANCH_SUCCESS]: (state: GitSyncReducerState) => ({
...state,
isMerging: false,
mergeError: null,
}),
[ReduxActionErrorTypes.MERGE_BRANCH_ERROR]: (
state: GitSyncReducerState,
action: ReduxAction<unknown>,
) => ({
...state,
isMerging: false,
mergeError: action.payload,
}),
[ReduxActionTypes.SET_REMOTE_URL_INPUT_VALUE]: (
state: GitSyncReducerState,
action: ReduxAction<string>,
) => {
return {
...state,
tempRemoteUrl: action.payload,
};
},
[ReduxActionTypes.SET_SHOULD_SHOW_REPO_LIMIT_ERROR_MODAL]: (
state: GitSyncReducerState,
action: ReduxAction<boolean>,
) => ({
...state,
showRepoLimitErrorModal: action.payload,
}),
[ReduxActionTypes.SET_SHOULD_SHOW_DISCONNECT_GIT_MODAL]: (
state: GitSyncReducerState,
action: ReduxAction<boolean>,
) => ({
...state,
isDisconnectGitModalOpen: action.payload,
}),
[ReduxActionTypes.SET_DISCONNECTING_GIT_APPLICATION]: (
state: GitSyncReducerState,
action: ReduxAction<unknown>,
) => ({
...state,
disconnectingGitApp: action.payload,
}),
[ReduxActionTypes.FETCH_SSH_KEY_PAIR_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<GetSSHKeyResponseData>,
) => {
return {
...state,
SSHKeyPair: action.payload.publicKey,
deployKeyDocUrl: action.payload.docUrl,
supportedKeyTypes: action.payload?.gitSupportedSSHKeyType,
};
},
[ReduxActionErrorTypes.FETCH_SSH_KEY_PAIR_ERROR]: (
state: GitSyncReducerState,
) => {
return {
...state,
SSHKeyPair: null,
deployKeyDocUrl: "",
supportedKeyTypes: null,
};
},
[ReduxActionTypes.CREATE_APPLICATION_SUCCESS]: (
state: GitSyncReducerState,
) => {
return {
...state,
SSHKeyPair: null,
deployKeyDocUrl: "",
};
},
[ReduxActionTypes.GENERATE_SSH_KEY_PAIR_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<GetSSHKeyResponseData>,
) => {
return {
...state,
SSHKeyPair: action.payload.publicKey,
deployKeyDocUrl: action.payload.docUrl,
};
},
[ReduxActionTypes.SET_WORKSPACE_ID_FOR_IMPORT]: (
state: GitSyncReducerState,
) => {
return {
...state,
SSHKeyPair: "",
tempRemoteUrl: "",
};
},
[ReduxActionTypes.IMPORT_APPLICATION_FROM_GIT_INIT]: (
state: GitSyncReducerState,
) => ({
...state,
isImportingApplicationViaGit: true,
gitImportError: null,
}),
[ReduxActionTypes.IMPORT_APPLICATION_FROM_GIT_SUCCESS]: (
state: GitSyncReducerState,
) => ({
...state,
isImportingApplicationViaGit: false,
gitImportError: null,
}),
[ReduxActionTypes.IMPORT_APPLICATION_FROM_GIT_STATUS_RESET]: (
state: GitSyncReducerState,
) => ({
...state,
isImportingApplicationViaGit: false,
gitImportError: null,
}),
[ReduxActionTypes.IMPORT_APPLICATION_FROM_GIT_ERROR]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any>,
) => ({
...state,
gitImportError: action.payload,
}),
[ReduxActionTypes.RESET_SSH_KEY_PAIR]: (state: GitSyncReducerState) => ({
...state,
SSHKeyPair: null,
}),
[ReduxActionTypes.GIT_INFO_INIT]: (state: GitSyncReducerState) => ({
...initialState,
globalGitConfig: state.globalGitConfig,
localGitConfig: state.localGitConfig,
}),
[ReduxActionTypes.DELETE_BRANCH_SUCCESS]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any>,
) => ({
...state,
deleteBranch: action.payload,
}),
[ReduxActionErrorTypes.DELETE_BRANCH_ERROR]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any>,
) => ({
...state,
deleteBranchError: action.payload,
}),
[ReduxActionErrorTypes.DELETE_BRANCH_WARNING]: (
state: GitSyncReducerState,
action: ReduxAction<string>,
) => ({
...state,
deleteBranchWarning: action.payload,
}),
[ReduxActionTypes.DELETING_BRANCH]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any>,
) => ({
...state,
deletingBranch: action.payload,
}),
[ReduxActionTypes.GIT_DISCARD_CHANGES]: (state: GitSyncReducerState) => ({
...state,
isDiscarding: true,
discardError: null,
}),
[ReduxActionTypes.GIT_DISCARD_CHANGES_SUCCESS]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any>,
) => ({
...state,
isDiscarding: false,
discard: action.payload,
}),
[ReduxActionErrorTypes.GIT_DISCARD_CHANGES_ERROR]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any>,
) => ({
...state,
isDiscarding: false,
discardError: action.payload,
}),
[ReduxActionTypes.CLEAR_DISCARD_ERROR_STATE]: (
state: GitSyncReducerState,
) => ({
...state,
discardError: null,
}),
[ReduxActionTypes.SWITCH_GIT_BRANCH_INIT]: (
state: GitSyncReducerState,
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
action: ReduxAction<any>,
) => ({
...state,
switchingToBranch: action.payload,
isSwitchingBranch: true,
}),
[ReduxActionTypes.SWITCH_GIT_BRANCH_SUCCESS]: (
state: GitSyncReducerState,
) => ({
...state,
switchingToBranch: null,
isSwitchingBranch: false,
}),
[ReduxActionTypes.SWITCH_GIT_BRANCH_ERROR]: (state: GitSyncReducerState) => ({
...state,
switchingToBranch: null,
isSwitchingBranch: false,
}),
[ReduxActionTypes.GIT_FETCH_PROTECTED_BRANCHES_INIT]: (
state: GitSyncReducerState,
) => ({
...state,
protectedBranchesLoading: true,
}),
[ReduxActionTypes.GIT_FETCH_PROTECTED_BRANCHES_SUCCESS]: (
state: GitSyncReducerState,
action: ReduxAction<{ protectedBranches: string[] }>,
) => ({
...state,
protectedBranchesLoading: false,
protectedBranches: action.payload.protectedBranches,
}),
[ReduxActionTypes.GIT_FETCH_PROTECTED_BRANCHES_ERROR]: (state) => ({
...state,
protectedBranchesLoading: false,
}),
[ReduxActionTypes.GIT_UPDATE_PROTECTED_BRANCHES_INIT]: (state) => ({
...state,
isUpdateProtectedBranchesLoading: true,
}),
[ReduxActionTypes.GIT_UPDATE_PROTECTED_BRANCHES_SUCCESS]: (state) => ({
...state,
isUpdateProtectedBranchesLoading: false,
}),
[ReduxActionTypes.GIT_UPDATE_PROTECTED_BRANCHES_ERROR]: (state) => ({
...state,
isUpdateProtectedBranchesLoading: false,
}),
[ReduxActionTypes.GIT_SET_IS_AUTOCOMMIT_MODAL_OPEN]: (
state,
action: ReduxAction<{ isAutocommitModalOpen: boolean }>,
) => ({
...state,
isAutocommitModalOpen: action.payload.isAutocommitModalOpen,
}),
[ReduxActionTypes.GIT_TOGGLE_AUTOCOMMIT_ENABLED_INIT]: (state) => ({
...state,
togglingAutocommit: true,
}),
[ReduxActionTypes.GIT_TOGGLE_AUTOCOMMIT_ENABLED_SUCCESS]: (state) => ({
...state,
togglingAutocommit: false,
}),
[ReduxActionErrorTypes.GIT_TOGGLE_AUTOCOMMIT_ENABLED_ERROR]: (state) => ({
...state,
togglingAutocommit: false,
}),
[ReduxActionTypes.GIT_AUTOCOMMIT_TRIGGER_INIT]: (state) => ({
...state,
triggeringAutocommit: true,
}),
[ReduxActionTypes.GIT_AUTOCOMMIT_TRIGGER_SUCCESS]: (state) => ({
...state,
triggeringAutocommit: false,
}),
[ReduxActionErrorTypes.GIT_AUTOCOMMIT_TRIGGER_ERROR]: (state) => ({
...state,
triggeringAutocommit: false,
}),
[ReduxActionTypes.GIT_AUTOCOMMIT_START_PROGRESS_POLLING]: (state) => ({
...state,
pollingAutocommitStatus: true,
}),
[ReduxActionTypes.GIT_AUTOCOMMIT_STOP_PROGRESS_POLLING]: (state) => ({
...state,
pollingAutocommitStatus: false,
}),
[ReduxActionErrorTypes.GIT_AUTOCOMMIT_PROGRESS_POLLING_ERROR]: (state) => ({
...state,
pollingAutocommitStatus: false,
}),
[ReduxActionTypes.GIT_GET_METADATA_INIT]: (state) => ({
...state,
gitMetadataLoading: true,
}),
[ReduxActionTypes.GIT_GET_METADATA_SUCCESS]: (
state,
action: ReduxAction<{ gitMetadata: GitMetadata }>,
) => ({
...state,
gitMetadataLoading: false,
gitMetadata: action.payload.gitMetadata,
}),
[ReduxActionErrorTypes.GIT_GET_METADATA_ERROR]: (state) => ({
...state,
gitMetadataLoading: false,
}),
[ReduxActionTypes.GIT_SET_SETTINGS_MODAL_OPEN]: (
state,
action: ReduxAction<{ open: boolean; tab?: GitSettingsTab }>,
) => ({
...state,
isGitSettingsModalOpen: action.payload.open,
activeGitSettingsModalTab: action.payload.tab || GitSettingsTab.GENERAL,
}),
[ReduxActionTypes.GIT_SHOW_BRANCH_POPUP]: (
state,
action: ReduxAction<{ show: boolean }>,
) => ({
...state,
showBranchPopup: action.payload.show,
}),
});
export interface GitStatusData {
modified: string[];
added: string[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
removed: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
pagesModified: any[];
pagesAdded: string[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
pagesRemoved: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
queriesModified: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
queriesAdded: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
queriesRemoved: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jsObjectsModified: any[];
jsObjectsAdded: string[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jsObjectsRemoved: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
datasourcesModified: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
datasourcesAdded: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
datasourcesRemoved: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jsLibsModified: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jsLibsAdded: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jsLibsRemoved: any[];
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
conflicting: any[];
isClean: boolean;
aheadCount: number;
behindCount: number;
remoteBranch: string;
discardDocUrl: string;
migrationMessage: string;
modifiedPages: number;
modifiedDatasources: number;
modifiedJSObjects: number;
modifiedQueries: number;
modifiedJSLibs: number;
modifiedSourceModules?: number;
modifiedModuleInstances?: number;
}
interface GitErrorPayloadType {
code: number | string;
errorType?: string;
message: string;
referenceDoc?: string;
}
export interface GitErrorType {
error: GitErrorPayloadType;
show?: boolean;
crash?: boolean;
logToSentry?: boolean;
}
export interface GitBranchDeleteState {
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
deleteBranch?: any;
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
deleteBranchError?: any;
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
deleteBranchWarning?: any;
deletingBranch?: boolean;
}
export interface GitDiscardResponse {
id: string;
modifiedBy: string;
userPermissions: string[];
name: string;
workspaceId: string;
isPublic: boolean;
pages: PageDefaultMeta[];
appIsExample: boolean;
color: string;
icon: string;
slug: string;
gitApplicationMetadata: {
branchName: string;
defaultBranchName: string;
remoteUrl: string;
browserSupportedRemoteUrl: string;
isRepoPrivate: boolean;
repoName: string;
defaultApplicationId: string;
lastCommittedAt: string;
};
lastDeployedAt: string;
evaluationVersion: number;
applicationVersion: number;
isManualUpdate: boolean;
isAutoUpdate: boolean;
appLayout: {
type: string;
};
new: boolean;
modifiedAt: string;
}
export type GitMetadata = {
branchName: string;
defaultBranchName: string;
remoteUrl: string;
repoName: string;
browserSupportedUrl?: string;
isRepoPrivate?: boolean;
browserSupportedRemoteUrl: string;
defaultApplicationId: string;
isProtectedBranch: boolean;
autoCommitConfig: {
enabled: boolean;
};
isAutoDeploymentEnabled?: boolean;
} | null;
export type GitSyncReducerState = GitBranchDeleteState & {
isGitSyncModalOpen: boolean;
isCommitting?: boolean;
isCommitSuccessful: boolean;
fetchingBranches: boolean;
isFetchingGlobalGitConfig: boolean;
isFetchingLocalGitConfig: boolean;
isFetchingGitStatus: boolean;
isFetchingMergeStatus: boolean;
activeGitSyncModalTab: GitSyncModalTab;
isErrorPopupVisible?: boolean;
globalGitConfig: GitConfig;
branches: Array<{ branchName: string; default: boolean }>;
showBranchPopup: boolean;
localGitConfig: GitConfig;
gitStatus?: GitStatusData;
mergeStatus?: MergeStatus;
connectError?: GitErrorType;
commitAndPushError?: GitErrorType;
pullError?: GitErrorType;
mergeError?: GitErrorType;
pullFailed?: boolean;
pullInProgress?: boolean;
isMerging?: boolean;
tempRemoteUrl?: string;
showRepoLimitErrorModal: boolean;
isDisconnectGitModalOpen: boolean;
disconnectingGitApp: {
id: string;
name: string;
};
useGlobalProfile?: boolean;
SSHKeyPair?: string;
deployKeyDocUrl?: string;
supportedKeyTypes?: SSHKeyType[];
isImportingApplicationViaGit?: boolean;
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
gitImportError?: any;
isDiscarding: boolean;
discard?: GitDiscardResponse;
discardError?: GitErrorType;
isSwitchingBranch: boolean;
switchingToBranch: string | null;
isDeploying: boolean;
protectedBranches: string[];
protectedBranchesLoading: boolean;
isUpdateProtectedBranchesLoading: boolean;
isAutocommitModalOpen: boolean;
togglingAutocommit: boolean;
triggeringAutocommit: boolean;
pollingAutocommitStatus: boolean;
gitMetadata: GitMetadata | null;
gitMetadataLoading: boolean;
isGitSettingsModalOpen: boolean;
activeGitSettingsModalTab: GitSettingsTab;
};
export default gitSyncReducer;