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 -->
This commit is contained in:
parent
1030275d0d
commit
c169d48888
|
|
@ -272,28 +272,14 @@ function statusThemeTransformer(status: FetchStatusResponseData) {
|
||||||
return tree;
|
return tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
function statusPackagesTransformer(status: FetchStatusResponseData) {
|
function statusModuleInstancesTransformer(status: FetchStatusResponseData) {
|
||||||
const {
|
const { modifiedModuleInstances = 0, modifiedSourceModules = 0 } = status;
|
||||||
modifiedModuleInstances = 0,
|
|
||||||
modifiedModules = 0,
|
|
||||||
modifiedPackages = 0,
|
|
||||||
} = status;
|
|
||||||
const tree = [] as StatusTreeStruct[];
|
const tree = [] as StatusTreeStruct[];
|
||||||
|
|
||||||
if (modifiedPackages > 0) {
|
if (modifiedSourceModules > 0) {
|
||||||
tree.push(
|
tree.push(
|
||||||
createTreeNode({
|
createTreeNode({
|
||||||
subject: `${modifiedPackages} package${modifiedPackages > 1 ? "s" : ""}`,
|
subject: `${modifiedSourceModules} source module${modifiedSourceModules > 1 ? "s" : ""}`,
|
||||||
verb: "modified",
|
|
||||||
type: "package",
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modifiedModules > 0) {
|
|
||||||
tree.push(
|
|
||||||
createTreeNode({
|
|
||||||
subject: `${modifiedModules} module${modifiedModules > 1 ? "s" : ""}`,
|
|
||||||
verb: "modified",
|
verb: "modified",
|
||||||
type: "module",
|
type: "module",
|
||||||
}),
|
}),
|
||||||
|
|
@ -323,7 +309,7 @@ export default function applicationStatusTransformer(
|
||||||
...statusJsLibTransformer(status),
|
...statusJsLibTransformer(status),
|
||||||
...statusSettingsTransformer(status),
|
...statusSettingsTransformer(status),
|
||||||
...statusThemeTransformer(status),
|
...statusThemeTransformer(status),
|
||||||
...statusPackagesTransformer(status),
|
...statusModuleInstancesTransformer(status),
|
||||||
] as StatusTreeStruct[];
|
] as StatusTreeStruct[];
|
||||||
|
|
||||||
return tree;
|
return tree;
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ export default function BranchButton({
|
||||||
isAutocommitPolling = false,
|
isAutocommitPolling = false,
|
||||||
isBranchPopupOpen = false,
|
isBranchPopupOpen = false,
|
||||||
isProtectedMode = false,
|
isProtectedMode = false,
|
||||||
isStatusClean = false,
|
isStatusClean = true,
|
||||||
isTriggerAutocommitLoading = false,
|
isTriggerAutocommitLoading = false,
|
||||||
toggleBranchPopup = noop,
|
toggleBranchPopup = noop,
|
||||||
}: BranchButtonProps) {
|
}: BranchButtonProps) {
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ function QuickActionsView({
|
||||||
isProtectedMode = false,
|
isProtectedMode = false,
|
||||||
isPullFailing = false,
|
isPullFailing = false,
|
||||||
isPullLoading = false,
|
isPullLoading = false,
|
||||||
isStatusClean = false,
|
isStatusClean = true,
|
||||||
isTriggerAutocommitLoading = false,
|
isTriggerAutocommitLoading = false,
|
||||||
pull = noop,
|
pull = noop,
|
||||||
statusBehindCount = 0,
|
statusBehindCount = 0,
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,10 @@ export const calcStatusChangeCount = (status: FetchStatusResponseData) => {
|
||||||
modifiedDatasources = 0,
|
modifiedDatasources = 0,
|
||||||
modifiedJSLibs = 0,
|
modifiedJSLibs = 0,
|
||||||
modifiedJSObjects = 0,
|
modifiedJSObjects = 0,
|
||||||
modifiedModules = 0,
|
modifiedModuleInstances = 0,
|
||||||
modifiedPages = 0,
|
modifiedPages = 0,
|
||||||
modifiedQueries = 0,
|
modifiedQueries = 0,
|
||||||
|
modifiedSourceModules = 0,
|
||||||
} = status || {};
|
} = status || {};
|
||||||
const themeCount = modified.includes("theme.json") ? 1 : 0;
|
const themeCount = modified.includes("theme.json") ? 1 : 0;
|
||||||
const settingsCount = modified.includes("application.json") ? 1 : 0;
|
const settingsCount = modified.includes("application.json") ? 1 : 0;
|
||||||
|
|
@ -20,10 +21,11 @@ export const calcStatusChangeCount = (status: FetchStatusResponseData) => {
|
||||||
modifiedDatasources +
|
modifiedDatasources +
|
||||||
modifiedJSLibs +
|
modifiedJSLibs +
|
||||||
modifiedJSObjects +
|
modifiedJSObjects +
|
||||||
modifiedModules +
|
|
||||||
modifiedPages +
|
modifiedPages +
|
||||||
modifiedQueries +
|
modifiedQueries +
|
||||||
themeCount +
|
themeCount +
|
||||||
|
modifiedSourceModules +
|
||||||
|
modifiedModuleInstances +
|
||||||
settingsCount
|
settingsCount
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ function QuickActions() {
|
||||||
const { currentBranch, isBranchPopupOpen, toggleBranchPopup } = useBranches();
|
const { currentBranch, isBranchPopupOpen, toggleBranchPopup } = useBranches();
|
||||||
|
|
||||||
const isPullFailing = !!pullError;
|
const isPullFailing = !!pullError;
|
||||||
const isStatusClean = status?.isClean ?? false;
|
const isStatusClean = status?.isClean ?? true;
|
||||||
const statusBehindCount = status?.behindCount ?? 0;
|
const statusBehindCount = status?.behindCount ?? 0;
|
||||||
const statusChangeCount = useStatusChangeCount(status);
|
const statusChangeCount = useStatusChangeCount(status);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,16 +6,17 @@ import { useDispatch } from "react-redux";
|
||||||
import useArtifactSelector from "./useArtifactSelector";
|
import useArtifactSelector from "./useArtifactSelector";
|
||||||
|
|
||||||
export default function useDiscard() {
|
export default function useDiscard() {
|
||||||
const { artifactDef } = useGitContext();
|
const { artifact, artifactDef } = useGitContext();
|
||||||
|
const artifactId = artifact?.id;
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
const discardState = useArtifactSelector(selectDiscardState);
|
const discardState = useArtifactSelector(selectDiscardState);
|
||||||
|
|
||||||
const discard = useCallback(() => {
|
const discard = useCallback(() => {
|
||||||
if (artifactDef) {
|
if (artifactDef && artifactId) {
|
||||||
dispatch(gitArtifactActions.discardInit({ artifactDef }));
|
dispatch(gitArtifactActions.discardInit({ artifactDef, artifactId }));
|
||||||
}
|
}
|
||||||
}, [artifactDef, dispatch]);
|
}, [artifactDef, artifactId, dispatch]);
|
||||||
|
|
||||||
const clearDiscardError = useCallback(() => {
|
const clearDiscardError = useCallback(() => {
|
||||||
if (artifactDef) {
|
if (artifactDef) {
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,10 @@ export interface FetchStatusResponseData {
|
||||||
modifiedDatasources: number;
|
modifiedDatasources: number;
|
||||||
modifiedJSLibs: number;
|
modifiedJSLibs: number;
|
||||||
modifiedJSObjects: number;
|
modifiedJSObjects: number;
|
||||||
modifiedPackages: number;
|
|
||||||
modifiedModuleInstances: number;
|
|
||||||
modifiedModules: number;
|
|
||||||
modifiedPages: number;
|
modifiedPages: number;
|
||||||
modifiedQueries: number;
|
modifiedQueries: number;
|
||||||
|
modifiedSourceModules: number;
|
||||||
|
modifiedModuleInstances: number;
|
||||||
pagesAdded: string[];
|
pagesAdded: string[];
|
||||||
pagesModified: string[];
|
pagesModified: string[];
|
||||||
pagesRemoved: string[];
|
pagesRemoved: string[];
|
||||||
|
|
|
||||||
|
|
@ -4,19 +4,22 @@ import { builderURL } from "ee/RouteBuilder";
|
||||||
import { createMessage, DISCARD_SUCCESS } from "ee/constants/messages";
|
import { createMessage, DISCARD_SUCCESS } from "ee/constants/messages";
|
||||||
import discardRequest from "git/requests/discardRequest";
|
import discardRequest from "git/requests/discardRequest";
|
||||||
import type { DiscardResponse } from "git/requests/discardRequest.types";
|
import type { DiscardResponse } from "git/requests/discardRequest.types";
|
||||||
|
import type { DiscardInitPayload } from "git/store/actions/discardActions";
|
||||||
import { gitArtifactActions } from "git/store/gitArtifactSlice";
|
import { gitArtifactActions } from "git/store/gitArtifactSlice";
|
||||||
import type { GitArtifactPayloadAction } from "git/store/types";
|
import type { GitArtifactPayloadAction } from "git/store/types";
|
||||||
import log from "loglevel";
|
import log from "loglevel";
|
||||||
import { call, delay, put } from "redux-saga/effects";
|
import { call, delay, put } from "redux-saga/effects";
|
||||||
import { validateResponse } from "sagas/ErrorSagas";
|
import { validateResponse } from "sagas/ErrorSagas";
|
||||||
|
|
||||||
export default function* discardSaga(action: GitArtifactPayloadAction) {
|
export default function* discardSaga(
|
||||||
const { artifactDef } = action.payload;
|
action: GitArtifactPayloadAction<DiscardInitPayload>,
|
||||||
|
) {
|
||||||
|
const { artifactDef, artifactId } = action.payload;
|
||||||
|
|
||||||
let response: DiscardResponse | undefined;
|
let response: DiscardResponse | undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
response = yield call(discardRequest, artifactDef.baseArtifactId);
|
response = yield call(discardRequest, artifactId);
|
||||||
const isValidResponse: boolean = yield validateResponse(response);
|
const isValidResponse: boolean = yield validateResponse(response);
|
||||||
|
|
||||||
if (response && isValidResponse) {
|
if (response && isValidResponse) {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,21 @@
|
||||||
import { createArtifactAction } from "../helpers/createArtifactAction";
|
import { createArtifactAction } from "../helpers/createArtifactAction";
|
||||||
import type { GitArtifactErrorPayloadAction } from "../types";
|
import type {
|
||||||
|
GitArtifactBasePayload,
|
||||||
|
GitArtifactErrorPayloadAction,
|
||||||
|
} from "../types";
|
||||||
|
|
||||||
export const discardInitAction = createArtifactAction((state) => {
|
export interface DiscardInitPayload extends GitArtifactBasePayload {
|
||||||
state.apiResponses.discard.loading = true;
|
artifactId: string;
|
||||||
state.apiResponses.discard.error = null;
|
}
|
||||||
|
|
||||||
return state;
|
export const discardInitAction = createArtifactAction<DiscardInitPayload>(
|
||||||
});
|
(state) => {
|
||||||
|
state.apiResponses.discard.loading = true;
|
||||||
|
state.apiResponses.discard.error = null;
|
||||||
|
|
||||||
|
return state;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
export const discardSuccessAction = createArtifactAction((state) => {
|
export const discardSuccessAction = createArtifactAction((state) => {
|
||||||
state.apiResponses.discard.loading = false;
|
state.apiResponses.discard.loading = false;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ const TitleText = styled(Text)`
|
||||||
export enum StaticChangeKind {
|
export enum StaticChangeKind {
|
||||||
SETTINGS = "SETTINGS",
|
SETTINGS = "SETTINGS",
|
||||||
THEME = "THEME",
|
THEME = "THEME",
|
||||||
PACKAGES = "PACKAGES",
|
|
||||||
MODULES = "MODULES",
|
MODULES = "MODULES",
|
||||||
REMOTE_AHEAD = "REMOTE_AHEAD",
|
REMOTE_AHEAD = "REMOTE_AHEAD",
|
||||||
REMOTE_BEHIND = "REMOTE_BEHIND",
|
REMOTE_BEHIND = "REMOTE_BEHIND",
|
||||||
|
|
@ -56,17 +55,10 @@ const allStaticChangeDefs: Record<
|
||||||
message: "Theme modified",
|
message: "Theme modified",
|
||||||
iconName: "sip-line",
|
iconName: "sip-line",
|
||||||
}),
|
}),
|
||||||
[StaticChangeKind.PACKAGES]: (status: GitStatusData) => ({
|
|
||||||
condition: (status.modifiedPackages ?? 0) > 0,
|
|
||||||
message: `${status.modifiedPackages ?? 0} ${
|
|
||||||
(status.modifiedPackages ?? 0) > 0 ? "packages" : "package"
|
|
||||||
} modified`,
|
|
||||||
iconName: "package",
|
|
||||||
}),
|
|
||||||
[StaticChangeKind.MODULES]: (status: GitStatusData) => ({
|
[StaticChangeKind.MODULES]: (status: GitStatusData) => ({
|
||||||
condition: (status.modifiedModules ?? 0) > 0,
|
condition: (status.modifiedSourceModules ?? 0) > 0,
|
||||||
message: `${status.modifiedModules ?? 0} ${
|
message: `${status.modifiedSourceModules ?? 0} ${
|
||||||
(status.modifiedModules ?? 0) > 0 ? "modules" : "module"
|
(status.modifiedSourceModules ?? 0) > 0 ? "modules" : "module"
|
||||||
} modified`,
|
} modified`,
|
||||||
iconName: "package",
|
iconName: "package",
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -342,39 +342,10 @@ describe("GitChangesList", () => {
|
||||||
expect(getByTestId("t--status-change-THEME")).toBeInTheDocument();
|
expect(getByTestId("t--status-change-THEME")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should render Package related changes", () => {
|
|
||||||
const store = getMockStore({
|
|
||||||
gitStatus: {
|
|
||||||
modifiedPackages: 2,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const { getByTestId, queryByTestId } = render(
|
|
||||||
<Provider store={store}>
|
|
||||||
<GitChangesList />
|
|
||||||
</Provider>,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(
|
|
||||||
queryByTestId("t--status-change-DATASOURCES"),
|
|
||||||
).not.toBeInTheDocument();
|
|
||||||
expect(queryByTestId("t--status-change-JSLIBS")).not.toBeInTheDocument();
|
|
||||||
expect(
|
|
||||||
queryByTestId("t--status-change-REMOTE_AHEAD"),
|
|
||||||
).not.toBeInTheDocument();
|
|
||||||
expect(
|
|
||||||
queryByTestId("t--status-change-REMOTE_BEHIND"),
|
|
||||||
).not.toBeInTheDocument();
|
|
||||||
expect(getByTestId("t--status-change-PACKAGES")).toBeInTheDocument();
|
|
||||||
expect(queryByTestId("t--status-change-MODULES")).not.toBeInTheDocument();
|
|
||||||
expect(queryByTestId("t--status-change-SETTINGS")).not.toBeInTheDocument();
|
|
||||||
expect(queryByTestId("t--status-change-THEME")).not.toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should render Module related changes", () => {
|
it("should render Module related changes", () => {
|
||||||
const store = getMockStore({
|
const store = getMockStore({
|
||||||
gitStatus: {
|
gitStatus: {
|
||||||
modifiedModules: 2,
|
modifiedSourceModules: 2,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,6 @@ export default function GitChangesList() {
|
||||||
<ExpandableChange kind={ExpandableChangeKind.JSLIBS} status={status} />
|
<ExpandableChange kind={ExpandableChangeKind.JSLIBS} status={status} />
|
||||||
<StaticChange kind={StaticChangeKind.SETTINGS} status={status} />
|
<StaticChange kind={StaticChangeKind.SETTINGS} status={status} />
|
||||||
<StaticChange kind={StaticChangeKind.THEME} status={status} />
|
<StaticChange kind={StaticChangeKind.THEME} status={status} />
|
||||||
<StaticChange kind={StaticChangeKind.PACKAGES} status={status} />
|
|
||||||
<StaticChange kind={StaticChangeKind.MODULES} status={status} />
|
<StaticChange kind={StaticChangeKind.MODULES} status={status} />
|
||||||
{status?.migrationMessage ? (
|
{status?.migrationMessage ? (
|
||||||
<CalloutContainer>
|
<CalloutContainer>
|
||||||
|
|
|
||||||
|
|
@ -754,8 +754,7 @@ export interface GitStatusData {
|
||||||
modifiedJSObjects: number;
|
modifiedJSObjects: number;
|
||||||
modifiedQueries: number;
|
modifiedQueries: number;
|
||||||
modifiedJSLibs: number;
|
modifiedJSLibs: number;
|
||||||
modifiedPackages?: number;
|
modifiedSourceModules?: number;
|
||||||
modifiedModules?: number;
|
|
||||||
modifiedModuleInstances?: number;
|
modifiedModuleInstances?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -146,10 +146,10 @@ export const getCountOfChangesToCommit = (state: AppState) => {
|
||||||
modifiedDatasources = 0,
|
modifiedDatasources = 0,
|
||||||
modifiedJSLibs = 0,
|
modifiedJSLibs = 0,
|
||||||
modifiedJSObjects = 0,
|
modifiedJSObjects = 0,
|
||||||
modifiedModules = 0,
|
modifiedModuleInstances = 0,
|
||||||
modifiedPackages = 0,
|
|
||||||
modifiedPages = 0,
|
modifiedPages = 0,
|
||||||
modifiedQueries = 0,
|
modifiedQueries = 0,
|
||||||
|
modifiedSourceModules = 0,
|
||||||
} = gitStatus || {};
|
} = gitStatus || {};
|
||||||
const themeCount = modified.includes("theme.json") ? 1 : 0;
|
const themeCount = modified.includes("theme.json") ? 1 : 0;
|
||||||
const settingsCount = modified.includes("application.json") ? 1 : 0;
|
const settingsCount = modified.includes("application.json") ? 1 : 0;
|
||||||
|
|
@ -159,8 +159,8 @@ export const getCountOfChangesToCommit = (state: AppState) => {
|
||||||
modifiedDatasources +
|
modifiedDatasources +
|
||||||
modifiedJSLibs +
|
modifiedJSLibs +
|
||||||
modifiedJSObjects +
|
modifiedJSObjects +
|
||||||
modifiedModules +
|
modifiedSourceModules +
|
||||||
modifiedPackages +
|
modifiedModuleInstances +
|
||||||
modifiedPages +
|
modifiedPages +
|
||||||
modifiedQueries +
|
modifiedQueries +
|
||||||
themeCount +
|
themeCount +
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user