@webiny/app-headless-cms-workflows 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.eb81deee7e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js +28 -39
- package/Components/CmsEntriesWorkflowStateList/CmsEntriesWorkflowStateListFooterMenu.js.map +1 -1
- package/Components/CmsEntriesWorkflowStateList/index.js +0 -2
- package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js +41 -64
- package/Components/ContentEntryForm/CmsEntryFormCreateNewRevisionButton.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js +17 -33
- package/Components/ContentEntryForm/CmsEntryFormScheduleMenuItemAction.js.map +1 -1
- package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js +10 -17
- package/Components/ContentEntryForm/CmsEntryFormTooltipButton.js.map +1 -1
- package/Components/ContentEntryForm/ContentEntryFormWorkflow.js +21 -70
- package/Components/ContentEntryForm/ContentEntryFormWorkflow.js.map +1 -1
- package/Components/ContentEntryForm/index.d.ts +0 -3
- package/Components/ContentEntryForm/index.js +0 -5
- package/Components/OptionItem/OpenInNewWindow.js +28 -36
- package/Components/OptionItem/OpenInNewWindow.js.map +1 -1
- package/Routes/CmsWorkflowsEditor.js +24 -27
- package/Routes/CmsWorkflowsEditor.js.map +1 -1
- package/Routes/index.js +0 -2
- package/features/WorkflowStateCacheHandler.d.ts +11 -0
- package/features/WorkflowStateCacheHandler.js +50 -0
- package/features/WorkflowStateCacheHandler.js.map +1 -0
- package/features/feature.d.ts +1 -0
- package/features/feature.js +11 -0
- package/features/feature.js.map +1 -0
- package/index.d.ts +1 -1
- package/index.js +17 -5
- package/index.js.map +1 -1
- package/package.json +21 -17
- package/presentation/CmsWorkflowsEditorView.d.ts +5 -0
- package/presentation/CmsWorkflowsEditorView.js +90 -0
- package/presentation/CmsWorkflowsEditorView.js.map +1 -0
- package/presentation/ContentEntryFormPresenterWorkflowDecorator.d.ts +25 -0
- package/presentation/ContentEntryFormPresenterWorkflowDecorator.js +70 -0
- package/presentation/ContentEntryFormPresenterWorkflowDecorator.js.map +1 -0
- package/presentation/TableRowMapperWorkflowDecorator.d.ts +11 -0
- package/presentation/TableRowMapperWorkflowDecorator.js +25 -0
- package/presentation/TableRowMapperWorkflowDecorator.js.map +1 -0
- package/presentation/WorkflowStateGetEntryFieldSelection.d.ts +8 -0
- package/presentation/WorkflowStateGetEntryFieldSelection.js +24 -0
- package/presentation/WorkflowStateGetEntryFieldSelection.js.map +1 -0
- package/presentation/WorkflowStateListEntriesFieldSelection.d.ts +8 -0
- package/presentation/WorkflowStateListEntriesFieldSelection.js +24 -0
- package/presentation/WorkflowStateListEntriesFieldSelection.js.map +1 -0
- package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.d.ts +15 -0
- package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js +50 -0
- package/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js.map +1 -0
- package/presentation/cmsWorkflowsEditor/abstractions.d.ts +19 -0
- package/presentation/cmsWorkflowsEditor/abstractions.js +5 -0
- package/presentation/cmsWorkflowsEditor/abstractions.js.map +1 -0
- package/presentation/cmsWorkflowsEditor/feature.d.ts +3 -0
- package/presentation/cmsWorkflowsEditor/feature.js +17 -0
- package/presentation/cmsWorkflowsEditor/feature.js.map +1 -0
- package/presentation/feature.d.ts +1 -0
- package/presentation/feature.js +21 -0
- package/presentation/feature.js.map +1 -0
- package/routes.js +17 -18
- package/routes.js.map +1 -1
- package/types.d.ts +10 -0
- package/types.js +0 -0
- package/utils/appName.js +9 -12
- package/utils/appName.js.map +1 -1
- package/Components/CmsEntriesWorkflowStateList/index.js.map +0 -1
- package/Components/CmsWorkflows/CmsWorkflowsEditorView.d.ts +0 -3
- package/Components/CmsWorkflows/CmsWorkflowsEditorView.js +0 -128
- package/Components/CmsWorkflows/CmsWorkflowsEditorView.js.map +0 -1
- package/Components/ContentEntryForm/CmsEntryFormPublishButton.d.ts +0 -2
- package/Components/ContentEntryForm/CmsEntryFormPublishButton.js +0 -38
- package/Components/ContentEntryForm/CmsEntryFormPublishButton.js.map +0 -1
- package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.d.ts +0 -2
- package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js +0 -39
- package/Components/ContentEntryForm/CmsEntryFormSaveAndPublishButton.js.map +0 -1
- package/Components/ContentEntryForm/CmsEntryFormSaveButton.d.ts +0 -2
- package/Components/ContentEntryForm/CmsEntryFormSaveButton.js +0 -37
- package/Components/ContentEntryForm/CmsEntryFormSaveButton.js.map +0 -1
- package/Components/ContentEntryForm/ContentEntryWorkflow.d.ts +0 -2
- package/Components/ContentEntryForm/ContentEntryWorkflow.js +0 -35
- package/Components/ContentEntryForm/ContentEntryWorkflow.js.map +0 -1
- package/Components/ContentEntryForm/index.js.map +0 -1
- package/Routes/index.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GetEntryGraphQLFieldSelection } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
|
|
2
|
+
class WorkflowStateGetEntryFieldSelectionImpl {
|
|
3
|
+
getSelection() {
|
|
4
|
+
return [
|
|
5
|
+
`meta {
|
|
6
|
+
system {
|
|
7
|
+
workflow {
|
|
8
|
+
workflowId
|
|
9
|
+
stepId
|
|
10
|
+
stepName
|
|
11
|
+
state
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}`
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const WorkflowStateGetEntryFieldSelection = GetEntryGraphQLFieldSelection.createImplementation({
|
|
19
|
+
dependencies: [],
|
|
20
|
+
implementation: WorkflowStateGetEntryFieldSelectionImpl
|
|
21
|
+
});
|
|
22
|
+
export { WorkflowStateGetEntryFieldSelection };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=WorkflowStateGetEntryFieldSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/WorkflowStateGetEntryFieldSelection.js","sources":["../../src/presentation/WorkflowStateGetEntryFieldSelection.ts"],"sourcesContent":["import { GetEntryGraphQLFieldSelection } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\n\nclass WorkflowStateGetEntryFieldSelectionImpl implements GetEntryGraphQLFieldSelection.Interface {\n getSelection(): string[] {\n return [\n `meta {\n system {\n workflow {\n workflowId\n stepId\n stepName\n state\n }\n }\n }`\n ];\n }\n}\n\nexport const WorkflowStateGetEntryFieldSelection =\n GetEntryGraphQLFieldSelection.createImplementation({\n dependencies: [],\n implementation: WorkflowStateGetEntryFieldSelectionImpl\n });\n"],"names":["WorkflowStateGetEntryFieldSelectionImpl","WorkflowStateGetEntryFieldSelection","GetEntryGraphQLFieldSelection"],"mappings":";AAEA,MAAMA;IACF,eAAyB;QACrB,OAAO;YACH,CAAC;;;;;;;;;aASA,CAAC;SACL;IACL;AACJ;AAEO,MAAMC,sCACTC,8BAA8B,oBAAoB,CAAC;IAC/C,cAAc,EAAE;IAChB,gBAAgBF;AACpB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ListEntriesGraphQLFieldSelection } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
|
|
2
|
+
declare class WorkflowStateListEntriesFieldSelectionImpl implements ListEntriesGraphQLFieldSelection.Interface {
|
|
3
|
+
getSelection(): string[];
|
|
4
|
+
}
|
|
5
|
+
export declare const WorkflowStateListEntriesFieldSelection: typeof WorkflowStateListEntriesFieldSelectionImpl & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-headless-cms/features/contentEntry/listEntries/abstractions").IListEntriesGraphQLFieldSelection>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ListEntriesGraphQLFieldSelection } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
|
|
2
|
+
class WorkflowStateListEntriesFieldSelectionImpl {
|
|
3
|
+
getSelection() {
|
|
4
|
+
return [
|
|
5
|
+
`meta {
|
|
6
|
+
system {
|
|
7
|
+
workflow {
|
|
8
|
+
workflowId
|
|
9
|
+
stepId
|
|
10
|
+
stepName
|
|
11
|
+
state
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}`
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const WorkflowStateListEntriesFieldSelection = ListEntriesGraphQLFieldSelection.createImplementation({
|
|
19
|
+
dependencies: [],
|
|
20
|
+
implementation: WorkflowStateListEntriesFieldSelectionImpl
|
|
21
|
+
});
|
|
22
|
+
export { WorkflowStateListEntriesFieldSelection };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=WorkflowStateListEntriesFieldSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/WorkflowStateListEntriesFieldSelection.js","sources":["../../src/presentation/WorkflowStateListEntriesFieldSelection.ts"],"sourcesContent":["import { ListEntriesGraphQLFieldSelection } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\n\nclass WorkflowStateListEntriesFieldSelectionImpl\n implements ListEntriesGraphQLFieldSelection.Interface\n{\n getSelection(): string[] {\n return [\n `meta {\n system {\n workflow {\n workflowId\n stepId\n stepName\n state\n }\n }\n }`\n ];\n }\n}\n\nexport const WorkflowStateListEntriesFieldSelection =\n ListEntriesGraphQLFieldSelection.createImplementation({\n dependencies: [],\n implementation: WorkflowStateListEntriesFieldSelectionImpl\n });\n"],"names":["WorkflowStateListEntriesFieldSelectionImpl","WorkflowStateListEntriesFieldSelection","ListEntriesGraphQLFieldSelection"],"mappings":";AAEA,MAAMA;IAGF,eAAyB;QACrB,OAAO;YACH,CAAC;;;;;;;;;aASA,CAAC;SACL;IACL;AACJ;AAEO,MAAMC,yCACTC,iCAAiC,oBAAoB,CAAC;IAClD,cAAc,EAAE;IAChB,gBAAgBF;AACpB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
|
|
2
|
+
import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
|
|
3
|
+
import { CmsWorkflowsEditorPresenter as Abstraction } from "./abstractions.js";
|
|
4
|
+
declare class CmsWorkflowsEditorPresenterImpl implements Abstraction.Interface {
|
|
5
|
+
private listModelsUseCase;
|
|
6
|
+
private cache;
|
|
7
|
+
private _loading;
|
|
8
|
+
constructor(listModelsUseCase: ListModelsUseCase.Interface, cache: ModelsCache.Interface);
|
|
9
|
+
get vm(): Abstraction.ViewModel;
|
|
10
|
+
init(): void;
|
|
11
|
+
}
|
|
12
|
+
export declare const CmsWorkflowsEditorPresenter: typeof CmsWorkflowsEditorPresenterImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICmsWorkflowsEditorPresenter>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { computed, makeAutoObservable, runInAction } from "mobx";
|
|
2
|
+
import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
|
|
3
|
+
import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
|
|
4
|
+
import { createAppName } from "../../utils/appName.js";
|
|
5
|
+
import { CmsWorkflowsEditorPresenter } from "./abstractions.js";
|
|
6
|
+
class CmsWorkflowsEditorPresenterImpl {
|
|
7
|
+
constructor(listModelsUseCase, cache){
|
|
8
|
+
this.listModelsUseCase = listModelsUseCase;
|
|
9
|
+
this.cache = cache;
|
|
10
|
+
this._loading = true;
|
|
11
|
+
makeAutoObservable(this, {
|
|
12
|
+
listModelsUseCase: false,
|
|
13
|
+
cache: false,
|
|
14
|
+
vm: computed
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
get vm() {
|
|
18
|
+
const apps = this.cache.getItems().filter((model)=>{
|
|
19
|
+
if (model.tags.includes("$publishing:false")) return false;
|
|
20
|
+
if (model.tags.includes("singleEntry")) return false;
|
|
21
|
+
return true;
|
|
22
|
+
}).map((model)=>({
|
|
23
|
+
id: createAppName(model),
|
|
24
|
+
name: model.name,
|
|
25
|
+
modelId: model.modelId,
|
|
26
|
+
icon: model.icon
|
|
27
|
+
}));
|
|
28
|
+
return {
|
|
29
|
+
loading: this._loading,
|
|
30
|
+
apps
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
init() {
|
|
34
|
+
this.listModelsUseCase.execute().then(()=>{
|
|
35
|
+
runInAction(()=>{
|
|
36
|
+
this._loading = false;
|
|
37
|
+
});
|
|
38
|
+
}).catch(console.error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const CmsWorkflowsEditorPresenter_CmsWorkflowsEditorPresenter = CmsWorkflowsEditorPresenter.createImplementation({
|
|
42
|
+
implementation: CmsWorkflowsEditorPresenterImpl,
|
|
43
|
+
dependencies: [
|
|
44
|
+
ListModelsUseCase,
|
|
45
|
+
ModelsCache
|
|
46
|
+
]
|
|
47
|
+
});
|
|
48
|
+
export { CmsWorkflowsEditorPresenter_CmsWorkflowsEditorPresenter as CmsWorkflowsEditorPresenter };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=CmsWorkflowsEditorPresenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.js","sources":["../../../src/presentation/cmsWorkflowsEditor/CmsWorkflowsEditorPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport { ListModelsUseCase } from \"@webiny/app-headless-cms/features/model/listModels/abstractions.js\";\nimport { ModelsCache } from \"@webiny/app-headless-cms/features/model/abstractions.js\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { CmsWorkflowsEditorPresenter as Abstraction, type WorkflowApp } from \"./abstractions.js\";\n\nclass CmsWorkflowsEditorPresenterImpl implements Abstraction.Interface {\n private _loading = true;\n\n constructor(\n private listModelsUseCase: ListModelsUseCase.Interface,\n private cache: ModelsCache.Interface\n ) {\n makeAutoObservable<CmsWorkflowsEditorPresenterImpl, \"listModelsUseCase\" | \"cache\">(this, {\n listModelsUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): Abstraction.ViewModel {\n const apps: WorkflowApp[] = this.cache\n .getItems()\n .filter(model => {\n if (model.tags.includes(\"$publishing:false\")) {\n return false;\n }\n if (model.tags.includes(\"singleEntry\")) {\n return false;\n }\n return true;\n })\n .map(model => ({\n id: createAppName(model),\n name: model.name,\n modelId: model.modelId,\n icon: model.icon\n }));\n\n return {\n loading: this._loading,\n apps\n };\n }\n\n init(): void {\n this.listModelsUseCase\n .execute()\n .then(() => {\n runInAction(() => {\n this._loading = false;\n });\n })\n .catch(console.error);\n }\n}\n\nexport const CmsWorkflowsEditorPresenter = Abstraction.createImplementation({\n implementation: CmsWorkflowsEditorPresenterImpl,\n dependencies: [ListModelsUseCase, ModelsCache]\n});\n"],"names":["CmsWorkflowsEditorPresenterImpl","listModelsUseCase","cache","makeAutoObservable","computed","apps","model","createAppName","runInAction","console","CmsWorkflowsEditorPresenter","Abstraction","ListModelsUseCase","ModelsCache"],"mappings":";;;;;AAMA,MAAMA;IAGF,YACYC,iBAA8C,EAC9CC,KAA4B,CACtC;aAFUD,iBAAiB,GAAjBA;aACAC,KAAK,GAALA;aAJJ,QAAQ,GAAG;QAMfC,mBAAmF,IAAI,EAAE;YACrF,mBAAmB;YACnB,OAAO;YACP,IAAIC;QACR;IACJ;IAEA,IAAI,KAA4B;QAC5B,MAAMC,OAAsB,IAAI,CAAC,KAAK,CACjC,QAAQ,GACR,MAAM,CAACC,CAAAA;YACJ,IAAIA,MAAM,IAAI,CAAC,QAAQ,CAAC,sBACpB,OAAO;YAEX,IAAIA,MAAM,IAAI,CAAC,QAAQ,CAAC,gBACpB,OAAO;YAEX,OAAO;QACX,GACC,GAAG,CAACA,CAAAA,QAAU;gBACX,IAAIC,cAAcD;gBAClB,MAAMA,MAAM,IAAI;gBAChB,SAASA,MAAM,OAAO;gBACtB,MAAMA,MAAM,IAAI;YACpB;QAEJ,OAAO;YACH,SAAS,IAAI,CAAC,QAAQ;YACtBD;QACJ;IACJ;IAEA,OAAa;QACT,IAAI,CAAC,iBAAiB,CACjB,OAAO,GACP,IAAI,CAAC;YACFG,YAAY;gBACR,IAAI,CAAC,QAAQ,GAAG;YACpB;QACJ,GACC,KAAK,CAACC,QAAQ,KAAK;IAC5B;AACJ;AAEO,MAAMC,0DAA8BC,4BAAAA,oBAAgC,CAAC;IACxE,gBAAgBX;IAChB,cAAc;QAACY;QAAmBC;KAAY;AAClD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface WorkflowApp {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
modelId: string;
|
|
5
|
+
icon: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ICmsWorkflowsEditorPresenterViewModel {
|
|
8
|
+
loading: boolean;
|
|
9
|
+
apps: WorkflowApp[];
|
|
10
|
+
}
|
|
11
|
+
export interface ICmsWorkflowsEditorPresenter {
|
|
12
|
+
readonly vm: ICmsWorkflowsEditorPresenterViewModel;
|
|
13
|
+
init(): void;
|
|
14
|
+
}
|
|
15
|
+
export declare const CmsWorkflowsEditorPresenter: import("@webiny/di").Abstraction<ICmsWorkflowsEditorPresenter>;
|
|
16
|
+
export declare namespace CmsWorkflowsEditorPresenter {
|
|
17
|
+
type Interface = ICmsWorkflowsEditorPresenter;
|
|
18
|
+
type ViewModel = ICmsWorkflowsEditorPresenterViewModel;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/cmsWorkflowsEditor/abstractions.js","sources":["../../../src/presentation/cmsWorkflowsEditor/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\n\nexport interface WorkflowApp {\n id: string;\n name: string;\n modelId: string;\n icon: string;\n}\n\nexport interface ICmsWorkflowsEditorPresenterViewModel {\n loading: boolean;\n apps: WorkflowApp[];\n}\n\nexport interface ICmsWorkflowsEditorPresenter {\n readonly vm: ICmsWorkflowsEditorPresenterViewModel;\n init(): void;\n}\n\nexport const CmsWorkflowsEditorPresenter = createAbstraction<ICmsWorkflowsEditorPresenter>(\n \"CmsWorkflowsEditor/Presenter\"\n);\n\nexport namespace CmsWorkflowsEditorPresenter {\n export type Interface = ICmsWorkflowsEditorPresenter;\n export type ViewModel = ICmsWorkflowsEditorPresenterViewModel;\n}\n"],"names":["CmsWorkflowsEditorPresenter","createAbstraction"],"mappings":";AAmBO,MAAMA,8BAA8BC,kBACvC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { CmsWorkflowsEditorPresenter } from "./abstractions.js";
|
|
3
|
+
import { CmsWorkflowsEditorPresenter as external_CmsWorkflowsEditorPresenter_js_CmsWorkflowsEditorPresenter } from "./CmsWorkflowsEditorPresenter.js";
|
|
4
|
+
const CmsWorkflowsEditorPresenterFeature = createFeature({
|
|
5
|
+
name: "CmsWorkflowsEditor/Presenter",
|
|
6
|
+
register (container) {
|
|
7
|
+
container.register(external_CmsWorkflowsEditorPresenter_js_CmsWorkflowsEditorPresenter).inSingletonScope();
|
|
8
|
+
},
|
|
9
|
+
resolve (container) {
|
|
10
|
+
return {
|
|
11
|
+
presenter: container.resolve(CmsWorkflowsEditorPresenter)
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
export { CmsWorkflowsEditorPresenterFeature };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/cmsWorkflowsEditor/feature.js","sources":["../../../src/presentation/cmsWorkflowsEditor/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { CmsWorkflowsEditorPresenter as Abstraction } from \"./abstractions.js\";\nimport { CmsWorkflowsEditorPresenter } from \"./CmsWorkflowsEditorPresenter.js\";\n\nexport const CmsWorkflowsEditorPresenterFeature = createFeature({\n name: \"CmsWorkflowsEditor/Presenter\",\n register(container) {\n container.register(CmsWorkflowsEditorPresenter).inSingletonScope();\n },\n resolve(container) {\n return {\n presenter: container.resolve(Abstraction)\n };\n }\n});\n"],"names":["CmsWorkflowsEditorPresenterFeature","createFeature","container","CmsWorkflowsEditorPresenter","Abstraction"],"mappings":";;;AAIO,MAAMA,qCAAqCC,cAAc;IAC5D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,qEAA6B,gBAAgB;IACpE;IACA,SAAQD,SAAS;QACb,OAAO;YACH,WAAWA,UAAU,OAAO,CAACE;QACjC;IACJ;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CmsWorkflowsFeature: import("@webiny/feature/admin").FeatureDefinition<any, []>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { WorkflowsFeature } from "@webiny/app-workflows";
|
|
3
|
+
import { WorkflowStatePresenterFeature } from "@webiny/app-workflows/presentation/workflowState/feature.js";
|
|
4
|
+
import { ContentEntryFormPresenterWorkflowDecorator } from "./ContentEntryFormPresenterWorkflowDecorator.js";
|
|
5
|
+
import { TableRowMapperWorkflowDecorator } from "./TableRowMapperWorkflowDecorator.js";
|
|
6
|
+
import { WorkflowStateListEntriesFieldSelection } from "./WorkflowStateListEntriesFieldSelection.js";
|
|
7
|
+
import { WorkflowStateGetEntryFieldSelection } from "./WorkflowStateGetEntryFieldSelection.js";
|
|
8
|
+
const CmsWorkflowsFeature = createFeature({
|
|
9
|
+
name: "CmsWorkflows",
|
|
10
|
+
register (container) {
|
|
11
|
+
WorkflowsFeature.register(container);
|
|
12
|
+
WorkflowStatePresenterFeature.register(container);
|
|
13
|
+
container.registerDecorator(ContentEntryFormPresenterWorkflowDecorator);
|
|
14
|
+
container.registerDecorator(TableRowMapperWorkflowDecorator);
|
|
15
|
+
container.register(WorkflowStateListEntriesFieldSelection);
|
|
16
|
+
container.register(WorkflowStateGetEntryFieldSelection);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
export { CmsWorkflowsFeature };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/feature.js","sources":["../../src/presentation/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WorkflowsFeature } from \"@webiny/app-workflows\";\nimport { WorkflowStatePresenterFeature } from \"@webiny/app-workflows/presentation/workflowState/feature.js\";\nimport { ContentEntryFormPresenterWorkflowDecorator } from \"./ContentEntryFormPresenterWorkflowDecorator.js\";\nimport { TableRowMapperWorkflowDecorator } from \"./TableRowMapperWorkflowDecorator.js\";\nimport { WorkflowStateListEntriesFieldSelection } from \"./WorkflowStateListEntriesFieldSelection.js\";\nimport { WorkflowStateGetEntryFieldSelection } from \"./WorkflowStateGetEntryFieldSelection.js\";\n\nexport const CmsWorkflowsFeature = createFeature({\n name: \"CmsWorkflows\",\n register(container) {\n WorkflowsFeature.register(container);\n WorkflowStatePresenterFeature.register(container);\n container.registerDecorator(ContentEntryFormPresenterWorkflowDecorator);\n container.registerDecorator(TableRowMapperWorkflowDecorator);\n container.register(WorkflowStateListEntriesFieldSelection);\n container.register(WorkflowStateGetEntryFieldSelection);\n }\n});\n"],"names":["CmsWorkflowsFeature","createFeature","container","WorkflowsFeature","WorkflowStatePresenterFeature","ContentEntryFormPresenterWorkflowDecorator","TableRowMapperWorkflowDecorator","WorkflowStateListEntriesFieldSelection","WorkflowStateGetEntryFieldSelection"],"mappings":";;;;;;;AAQO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAS;QACdC,iBAAiB,QAAQ,CAACD;QAC1BE,8BAA8B,QAAQ,CAACF;QACvCA,UAAU,iBAAiB,CAACG;QAC5BH,UAAU,iBAAiB,CAACI;QAC5BJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;IACvB;AACJ"}
|
package/routes.js
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import { Route } from "@webiny/app-admin";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
})
|
|
19
|
-
}
|
|
2
|
+
const Routes = {
|
|
3
|
+
ContentModels: {
|
|
4
|
+
Workflows: new Route({
|
|
5
|
+
name: "Cms/ContentModels/Workflows",
|
|
6
|
+
path: "/cms/workflows",
|
|
7
|
+
params: (zod)=>({
|
|
8
|
+
app: zod.string().optional()
|
|
9
|
+
})
|
|
10
|
+
})
|
|
11
|
+
},
|
|
12
|
+
ContentEntries: {
|
|
13
|
+
ContentReviews: new Route({
|
|
14
|
+
name: "Cms/ContentEntries/WorkflowStateList",
|
|
15
|
+
path: "/cms/content-reviews"
|
|
16
|
+
})
|
|
17
|
+
}
|
|
20
18
|
};
|
|
19
|
+
export { Routes };
|
|
21
20
|
|
|
22
21
|
//# sourceMappingURL=routes.js.map
|
package/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"routes.js","sources":["../src/routes.ts"],"sourcesContent":["import { Route } from \"@webiny/app-admin\";\n\nexport const Routes = {\n ContentModels: {\n Workflows: new Route({\n name: \"Cms/ContentModels/Workflows\",\n path: \"/cms/workflows\",\n params: zod => {\n return {\n app: zod.string().optional()\n };\n }\n })\n },\n ContentEntries: {\n ContentReviews: new Route({\n name: \"Cms/ContentEntries/WorkflowStateList\",\n path: \"/cms/content-reviews\"\n })\n }\n};\n"],"names":["Routes","Route","zod"],"mappings":";AAEO,MAAMA,SAAS;IAClB,eAAe;QACX,WAAW,IAAIC,MAAM;YACjB,MAAM;YACN,MAAM;YACN,QAAQC,CAAAA,MACG;oBACH,KAAKA,IAAI,MAAM,GAAG,QAAQ;gBAC9B;QAER;IACJ;IACA,gBAAgB;QACZ,gBAAgB,IAAID,MAAM;YACtB,MAAM;YACN,MAAM;QACV;IACJ;AACJ"}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { WorkflowStateValue } from "@webiny/app-workflows/types.js";
|
|
2
|
+
export interface ICmsEntryWorkflowState {
|
|
3
|
+
workflowId: string;
|
|
4
|
+
stepId: string;
|
|
5
|
+
stepName: string;
|
|
6
|
+
state: WorkflowStateValue;
|
|
7
|
+
}
|
|
8
|
+
export interface ICmsEntrySystemWithWorkflow {
|
|
9
|
+
workflow?: ICmsEntryWorkflowState | null;
|
|
10
|
+
}
|
package/types.js
ADDED
|
File without changes
|
package/utils/appName.js
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
const createAppName = (model)=>`cms.${model.modelId}`;
|
|
2
|
+
const parseAppName = (appName)=>{
|
|
3
|
+
const parts = appName.split(".");
|
|
4
|
+
if (2 !== parts.length || "cms" !== parts[0]) throw new Error(`Invalid app name: "${appName}".`);
|
|
5
|
+
return parts[1];
|
|
3
6
|
};
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
throw new Error(`Invalid app name: "${appName}".`);
|
|
8
|
-
}
|
|
9
|
-
return parts[1];
|
|
10
|
-
};
|
|
11
|
-
export const isCmsAppName = appName => {
|
|
12
|
-
const parts = appName.split(".");
|
|
13
|
-
return parts.length === 2 && parts[0] === "cms";
|
|
7
|
+
const isCmsAppName = (appName)=>{
|
|
8
|
+
const parts = appName.split(".");
|
|
9
|
+
return 2 === parts.length && "cms" === parts[0];
|
|
14
10
|
};
|
|
11
|
+
export { createAppName, isCmsAppName, parseAppName };
|
|
15
12
|
|
|
16
13
|
//# sourceMappingURL=appName.js.map
|
package/utils/appName.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"utils/appName.js","sources":["../../src/utils/appName.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\n\nexport const createAppName = (model: Pick<CmsModel, \"modelId\">): string => {\n return `cms.${model.modelId}`;\n};\n\nexport const parseAppName = (appName: string): string => {\n const parts = appName.split(\".\");\n if (parts.length !== 2 || parts[0] !== \"cms\") {\n throw new Error(`Invalid app name: \"${appName}\".`);\n }\n return parts[1];\n};\n\nexport const isCmsAppName = (appName: string): boolean => {\n const parts = appName.split(\".\");\n return parts.length === 2 && parts[0] === \"cms\";\n};\n"],"names":["createAppName","model","parseAppName","appName","parts","Error","isCmsAppName"],"mappings":"AAEO,MAAMA,gBAAgB,CAACC,QACnB,CAAC,IAAI,EAAEA,MAAM,OAAO,EAAE;AAG1B,MAAMC,eAAe,CAACC;IACzB,MAAMC,QAAQD,QAAQ,KAAK,CAAC;IAC5B,IAAIC,AAAiB,MAAjBA,MAAM,MAAM,IAAUA,AAAa,UAAbA,KAAK,CAAC,EAAE,EAC9B,MAAM,IAAIC,MAAM,CAAC,mBAAmB,EAAEF,QAAQ,EAAE,CAAC;IAErD,OAAOC,KAAK,CAAC,EAAE;AACnB;AAEO,MAAME,eAAe,CAACH;IACzB,MAAMC,QAAQD,QAAQ,KAAK,CAAC;IAC5B,OAAOC,AAAiB,MAAjBA,MAAM,MAAM,IAAUA,AAAa,UAAbA,KAAK,CAAC,EAAE;AACzC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["CmsEntriesWorkflowStateListFooterMenu"],"sources":["index.ts"],"sourcesContent":["export { CmsEntriesWorkflowStateListFooterMenu } from \"./CmsEntriesWorkflowStateListFooterMenu.js\";\n"],"mappings":"AAAA,SAASA,qCAAqC","ignoreList":[]}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useMemo } from "react";
|
|
2
|
-
import { AdminConfig, useRoute, useRouter } from "@webiny/app-admin";
|
|
3
|
-
import { Routes } from "../../routes.js";
|
|
4
|
-
import { Components } from "@webiny/app-workflows";
|
|
5
|
-
import { Icon, Loader } from "@webiny/admin-ui";
|
|
6
|
-
import { useModels, usePermission } from "@webiny/app-headless-cms/admin/hooks/index.js";
|
|
7
|
-
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
8
|
-
import { createAppName } from "../../utils/appName.js";
|
|
9
|
-
import { normalizeIcon } from "@webiny/app-headless-cms/utils/normalizeIcon.js";
|
|
10
|
-
const {
|
|
11
|
-
Admin: {
|
|
12
|
-
WorkflowsEditor
|
|
13
|
-
},
|
|
14
|
-
Permissions: {
|
|
15
|
-
HasWorkflowsEditorPermission
|
|
16
|
-
}
|
|
17
|
-
} = Components;
|
|
18
|
-
const {
|
|
19
|
-
Menu
|
|
20
|
-
} = AdminConfig;
|
|
21
|
-
export const CmsWorkflowsEditorMenu = () => {
|
|
22
|
-
const router = useRouter();
|
|
23
|
-
const {
|
|
24
|
-
canCreateContentModels
|
|
25
|
-
} = usePermission();
|
|
26
|
-
if (!canCreateContentModels) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
return /*#__PURE__*/React.createElement(HasWorkflowsEditorPermission, null, /*#__PURE__*/React.createElement(Menu, {
|
|
30
|
-
name: "headlessCMS.contentModels.workflows",
|
|
31
|
-
parent: "headlessCMS",
|
|
32
|
-
element: /*#__PURE__*/React.createElement(Menu.Link, {
|
|
33
|
-
pinnable: true,
|
|
34
|
-
text: "Workflows",
|
|
35
|
-
to: router.getLink(Routes.ContentModels.Workflows)
|
|
36
|
-
})
|
|
37
|
-
}));
|
|
38
|
-
};
|
|
39
|
-
const ModelIcon = ({
|
|
40
|
-
model
|
|
41
|
-
}) => {
|
|
42
|
-
if (!model.icon) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
const icon = normalizeIcon(model.icon);
|
|
46
|
-
if (!icon) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
return /*#__PURE__*/React.createElement(Icon, {
|
|
50
|
-
icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
51
|
-
icon: icon
|
|
52
|
-
}),
|
|
53
|
-
label: model.name,
|
|
54
|
-
size: "sm",
|
|
55
|
-
className: "text-neutral-strong"
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
const isAllowed = model => {
|
|
59
|
-
// Exclude models that have the "$publishing:false" tag
|
|
60
|
-
if (model.tags.includes("$publishing:false")) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
// Exclude single entry models
|
|
64
|
-
else if (model.tags.includes("singleEntry")) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
return true;
|
|
68
|
-
};
|
|
69
|
-
export const CmsWorkflowsEditorView = () => {
|
|
70
|
-
const {
|
|
71
|
-
route
|
|
72
|
-
} = useRoute(Routes.ContentModels.Workflows);
|
|
73
|
-
const {
|
|
74
|
-
models,
|
|
75
|
-
loading
|
|
76
|
-
} = useModels();
|
|
77
|
-
const {
|
|
78
|
-
canEdit,
|
|
79
|
-
canCreateContentModels
|
|
80
|
-
} = usePermission();
|
|
81
|
-
const {
|
|
82
|
-
goToRoute
|
|
83
|
-
} = useRouter();
|
|
84
|
-
const apps = useMemo(() => {
|
|
85
|
-
return models.filter(model => {
|
|
86
|
-
if (isAllowed(model) === false) {
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
return canEdit(model, "cms.contentModel");
|
|
90
|
-
}).map(model => {
|
|
91
|
-
return {
|
|
92
|
-
id: createAppName(model),
|
|
93
|
-
name: model.name,
|
|
94
|
-
icon: /*#__PURE__*/React.createElement(ModelIcon, {
|
|
95
|
-
model: model
|
|
96
|
-
})
|
|
97
|
-
};
|
|
98
|
-
});
|
|
99
|
-
}, [models, canEdit]);
|
|
100
|
-
const app = useMemo(() => {
|
|
101
|
-
if (!route.params.app) {
|
|
102
|
-
return apps.find(() => true);
|
|
103
|
-
}
|
|
104
|
-
return apps.find(a => a.id === route.params.app) || null;
|
|
105
|
-
}, [route.params.app]);
|
|
106
|
-
const onAppClick = useCallback(id => {
|
|
107
|
-
goToRoute(Routes.ContentModels.Workflows, {
|
|
108
|
-
app: id
|
|
109
|
-
});
|
|
110
|
-
}, [apps]);
|
|
111
|
-
if (!canCreateContentModels) {
|
|
112
|
-
return null;
|
|
113
|
-
} else if (loading) {
|
|
114
|
-
return /*#__PURE__*/React.createElement(Loader, {
|
|
115
|
-
size: "lg",
|
|
116
|
-
variant: "accent",
|
|
117
|
-
indeterminate: true,
|
|
118
|
-
text: "Loading..."
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
return /*#__PURE__*/React.createElement(WorkflowsEditor, {
|
|
122
|
-
apps: apps,
|
|
123
|
-
onAppClick: onAppClick,
|
|
124
|
-
app: app?.id
|
|
125
|
-
});
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
//# sourceMappingURL=CmsWorkflowsEditorView.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useMemo","AdminConfig","useRoute","useRouter","Routes","Components","Icon","Loader","useModels","usePermission","FontAwesomeIcon","createAppName","normalizeIcon","Admin","WorkflowsEditor","Permissions","HasWorkflowsEditorPermission","Menu","CmsWorkflowsEditorMenu","router","canCreateContentModels","createElement","name","parent","element","Link","pinnable","text","to","getLink","ContentModels","Workflows","ModelIcon","model","icon","label","size","className","isAllowed","tags","includes","CmsWorkflowsEditorView","route","models","loading","canEdit","goToRoute","apps","filter","map","id","app","params","find","a","onAppClick","variant","indeterminate"],"sources":["CmsWorkflowsEditorView.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { AdminConfig, useRoute, useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\nimport type { IWorkflowApplication } from \"@webiny/app-workflows\";\nimport { Components } from \"@webiny/app-workflows\";\nimport { Icon, Loader } from \"@webiny/admin-ui\";\nimport { useModels, usePermission } from \"@webiny/app-headless-cms/admin/hooks/index.js\";\nimport type { CmsModel } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { createAppName } from \"~/utils/appName.js\";\nimport { normalizeIcon } from \"@webiny/app-headless-cms/utils/normalizeIcon.js\";\n\nconst {\n Admin: { WorkflowsEditor },\n Permissions: { HasWorkflowsEditorPermission }\n} = Components;\n\nconst { Menu } = AdminConfig;\n\nexport const CmsWorkflowsEditorMenu = () => {\n const router = useRouter();\n const { canCreateContentModels } = usePermission();\n\n if (!canCreateContentModels) {\n return null;\n }\n\n return (\n <HasWorkflowsEditorPermission>\n <Menu\n name={\"headlessCMS.contentModels.workflows\"}\n parent={\"headlessCMS\"}\n element={\n <Menu.Link\n pinnable={true}\n text={\"Workflows\"}\n to={router.getLink(Routes.ContentModels.Workflows)}\n />\n }\n />\n </HasWorkflowsEditorPermission>\n );\n};\n\ninterface IModelIconProps {\n model: Pick<CmsModel, \"icon\" | \"name\">;\n}\n\nconst ModelIcon = ({ model }: IModelIconProps) => {\n if (!model.icon) {\n return null;\n }\n\n const icon = normalizeIcon(model.icon);\n if (!icon) {\n return null;\n }\n\n return (\n <Icon\n icon={<FontAwesomeIcon icon={icon} />}\n label={model.name}\n size={\"sm\"}\n className={\"text-neutral-strong\"}\n />\n );\n};\n\nconst isAllowed = (model: Pick<CmsModel, \"modelId\" | \"tags\">) => {\n // Exclude models that have the \"$publishing:false\" tag\n if (model.tags.includes(\"$publishing:false\")) {\n return false;\n }\n // Exclude single entry models\n else if (model.tags.includes(\"singleEntry\")) {\n return false;\n }\n\n return true;\n};\n\nexport const CmsWorkflowsEditorView = () => {\n const { route } = useRoute(Routes.ContentModels.Workflows);\n const { models, loading } = useModels();\n const { canEdit, canCreateContentModels } = usePermission();\n const { goToRoute } = useRouter();\n\n const apps = useMemo<IWorkflowApplication[]>(() => {\n return models\n .filter(model => {\n if (isAllowed(model) === false) {\n return false;\n }\n return canEdit(model, \"cms.contentModel\");\n })\n .map(model => {\n return {\n id: createAppName(model),\n name: model.name,\n icon: <ModelIcon model={model} />\n };\n });\n }, [models, canEdit]);\n\n const app = useMemo(() => {\n if (!route.params.app) {\n return apps.find(() => true);\n }\n return apps.find(a => a.id === route.params.app) || null;\n }, [route.params.app]);\n\n const onAppClick = useCallback(\n (id: string) => {\n goToRoute(Routes.ContentModels.Workflows, {\n app: id\n });\n },\n [apps]\n );\n\n if (!canCreateContentModels) {\n return null;\n } else if (loading) {\n return <Loader size=\"lg\" variant=\"accent\" indeterminate={true} text=\"Loading...\" />;\n }\n\n return <WorkflowsEditor apps={apps} onAppClick={onAppClick} app={app?.id} />;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { useContentEntry, usePermission } from "@webiny/app-headless-cms";
|
|
2
|
-
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms/admin/config/contentEntries/index.js";
|
|
3
|
-
import React, { useCallback } from "react";
|
|
4
|
-
export const CmsEntryFormPublishButton = () => {
|
|
5
|
-
const {
|
|
6
|
-
loading,
|
|
7
|
-
entry,
|
|
8
|
-
publishEntryRevision
|
|
9
|
-
} = useContentEntry();
|
|
10
|
-
const {
|
|
11
|
-
ButtonPrimary
|
|
12
|
-
} = ContentEntryEditorConfig.Actions.ButtonAction.useButtons();
|
|
13
|
-
const publish = useCallback(() => {
|
|
14
|
-
if (!entry.id) {
|
|
15
|
-
console.warn(`You cannot publish an entry that hasn't been saved yet.`);
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
publishEntryRevision({
|
|
19
|
-
id: entry.id
|
|
20
|
-
});
|
|
21
|
-
}, [entry.id]);
|
|
22
|
-
const {
|
|
23
|
-
canEdit,
|
|
24
|
-
canPublish
|
|
25
|
-
} = usePermission();
|
|
26
|
-
if (entry.meta.status === "published") {
|
|
27
|
-
return null;
|
|
28
|
-
} else if (!canEdit(entry, "cms.contentEntry") || !canPublish("cms.contentEntry")) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
return /*#__PURE__*/React.createElement(ButtonPrimary, {
|
|
32
|
-
onAction: publish,
|
|
33
|
-
disabled: loading,
|
|
34
|
-
"data-testid": "workflows-cms-content-publish-content-button"
|
|
35
|
-
}, "Publish");
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
//# sourceMappingURL=CmsEntryFormPublishButton.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useContentEntry","usePermission","ContentEntryEditorConfig","React","useCallback","CmsEntryFormPublishButton","loading","entry","publishEntryRevision","ButtonPrimary","Actions","ButtonAction","useButtons","publish","id","console","warn","canEdit","canPublish","meta","status","createElement","onAction","disabled"],"sources":["CmsEntryFormPublishButton.tsx"],"sourcesContent":["import { useContentEntry, usePermission } from \"@webiny/app-headless-cms\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms/admin/config/contentEntries/index.js\";\nimport React, { useCallback } from \"react\";\n\nexport const CmsEntryFormPublishButton = () => {\n const { loading, entry, publishEntryRevision } = useContentEntry();\n const { ButtonPrimary } = ContentEntryEditorConfig.Actions.ButtonAction.useButtons();\n\n const publish = useCallback(() => {\n if (!entry.id) {\n console.warn(`You cannot publish an entry that hasn't been saved yet.`);\n return;\n }\n publishEntryRevision({ id: entry.id });\n }, [entry.id]);\n\n const { canEdit, canPublish } = usePermission();\n\n if (entry.meta.status === \"published\") {\n return null;\n } else if (!canEdit(entry, \"cms.contentEntry\") || !canPublish(\"cms.contentEntry\")) {\n return null;\n }\n\n return (\n <ButtonPrimary\n onAction={publish}\n disabled={loading}\n data-testid=\"workflows-cms-content-publish-content-button\"\n >\n {\"Publish\"}\n </ButtonPrimary>\n );\n};\n"],"mappings":"AAAA,SAASA,eAAe,EAAEC,aAAa,QAAQ,0BAA0B;AACzE,SAASC,wBAAwB,QAAQ,+DAA+D;AACxG,OAAOC,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAE1C,OAAO,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,MAAM;IAAEC,OAAO;IAAEC,KAAK;IAAEC;EAAqB,CAAC,GAAGR,eAAe,CAAC,CAAC;EAClE,MAAM;IAAES;EAAc,CAAC,GAAGP,wBAAwB,CAACQ,OAAO,CAACC,YAAY,CAACC,UAAU,CAAC,CAAC;EAEpF,MAAMC,OAAO,GAAGT,WAAW,CAAC,MAAM;IAC9B,IAAI,CAACG,KAAK,CAACO,EAAE,EAAE;MACXC,OAAO,CAACC,IAAI,CAAC,yDAAyD,CAAC;MACvE;IACJ;IACAR,oBAAoB,CAAC;MAAEM,EAAE,EAAEP,KAAK,CAACO;IAAG,CAAC,CAAC;EAC1C,CAAC,EAAE,CAACP,KAAK,CAACO,EAAE,CAAC,CAAC;EAEd,MAAM;IAAEG,OAAO;IAAEC;EAAW,CAAC,GAAGjB,aAAa,CAAC,CAAC;EAE/C,IAAIM,KAAK,CAACY,IAAI,CAACC,MAAM,KAAK,WAAW,EAAE;IACnC,OAAO,IAAI;EACf,CAAC,MAAM,IAAI,CAACH,OAAO,CAACV,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAACW,UAAU,CAAC,kBAAkB,CAAC,EAAE;IAC/E,OAAO,IAAI;EACf;EAEA,oBACIf,KAAA,CAAAkB,aAAA,CAACZ,aAAa;IACVa,QAAQ,EAAET,OAAQ;IAClBU,QAAQ,EAAEjB,OAAQ;IAClB,eAAY;EAA8C,GAEzD,SACU,CAAC;AAExB,CAAC","ignoreList":[]}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { ContentEntryEditorConfig } from "@webiny/app-headless-cms";
|
|
3
|
-
import { useWorkflowState } from "@webiny/app-workflows";
|
|
4
|
-
import { observer } from "mobx-react-lite";
|
|
5
|
-
import { WorkflowStateValue } from "@webiny/app-workflows";
|
|
6
|
-
import { CmsEntryFormPublishButton } from "./CmsEntryFormPublishButton.js";
|
|
7
|
-
const {
|
|
8
|
-
Actions
|
|
9
|
-
} = ContentEntryEditorConfig;
|
|
10
|
-
const {
|
|
11
|
-
ButtonAction
|
|
12
|
-
} = Actions;
|
|
13
|
-
const OverrideSaveAndPublishButton = observer(props => {
|
|
14
|
-
const {
|
|
15
|
-
presenter
|
|
16
|
-
} = useWorkflowState();
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* If there is no workflow state or state is approved, we simply render the original element.
|
|
20
|
-
* This is to ensure that no button will be shown if workflow state is active.
|
|
21
|
-
*/
|
|
22
|
-
if (props.name !== "publish" || !presenter.vm.workflow) {
|
|
23
|
-
return props.children;
|
|
24
|
-
} else if (presenter.vm.state?.state === WorkflowStateValue.approved) {
|
|
25
|
-
return /*#__PURE__*/React.createElement(CmsEntryFormPublishButton, null);
|
|
26
|
-
}
|
|
27
|
-
return null;
|
|
28
|
-
});
|
|
29
|
-
export const CmsEntryFormSaveAndPublishButton = ButtonAction.createDecorator(Original => {
|
|
30
|
-
return function WorkflowCmsEntryFormSaveAndPublishButton(props) {
|
|
31
|
-
return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
|
|
32
|
-
element: /*#__PURE__*/React.createElement(OverrideSaveAndPublishButton, {
|
|
33
|
-
name: props.name
|
|
34
|
-
}, props.element)
|
|
35
|
-
}));
|
|
36
|
-
};
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=CmsEntryFormSaveAndPublishButton.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","ContentEntryEditorConfig","useWorkflowState","observer","WorkflowStateValue","CmsEntryFormPublishButton","Actions","ButtonAction","OverrideSaveAndPublishButton","props","presenter","name","vm","workflow","children","state","approved","createElement","CmsEntryFormSaveAndPublishButton","createDecorator","Original","WorkflowCmsEntryFormSaveAndPublishButton","Object","assign","element"],"sources":["CmsEntryFormSaveAndPublishButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { useWorkflowState } from \"@webiny/app-workflows\";\nimport { observer } from \"mobx-react-lite\";\nimport { WorkflowStateValue } from \"@webiny/app-workflows\";\nimport { CmsEntryFormPublishButton } from \"./CmsEntryFormPublishButton.js\";\n\nconst { Actions } = ContentEntryEditorConfig;\nconst { ButtonAction } = Actions;\n\ninterface IOverrideSaveAndPublishButtonProps {\n name: string;\n children: React.ReactElement;\n}\n\nconst OverrideSaveAndPublishButton = observer((props: IOverrideSaveAndPublishButtonProps) => {\n const { presenter } = useWorkflowState();\n\n /**\n * If there is no workflow state or state is approved, we simply render the original element.\n * This is to ensure that no button will be shown if workflow state is active.\n */\n if (props.name !== \"publish\" || !presenter.vm.workflow) {\n return props.children;\n } else if (presenter.vm.state?.state === WorkflowStateValue.approved) {\n return <CmsEntryFormPublishButton />;\n }\n return null;\n});\n\nexport const CmsEntryFormSaveAndPublishButton = ButtonAction.createDecorator(Original => {\n return function WorkflowCmsEntryFormSaveAndPublishButton(props) {\n return (\n <Original\n {...props}\n element={\n <OverrideSaveAndPublishButton name={props.name}>\n {props.element}\n </OverrideSaveAndPublishButton>\n }\n />\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,wBAAwB,QAAQ,0BAA0B;AACnE,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,kBAAkB,QAAQ,uBAAuB;AAC1D,SAASC,yBAAyB;AAElC,MAAM;EAAEC;AAAQ,CAAC,GAAGL,wBAAwB;AAC5C,MAAM;EAAEM;AAAa,CAAC,GAAGD,OAAO;AAOhC,MAAME,4BAA4B,GAAGL,QAAQ,CAAEM,KAAyC,IAAK;EACzF,MAAM;IAAEC;EAAU,CAAC,GAAGR,gBAAgB,CAAC,CAAC;;EAExC;AACJ;AACA;AACA;EACI,IAAIO,KAAK,CAACE,IAAI,KAAK,SAAS,IAAI,CAACD,SAAS,CAACE,EAAE,CAACC,QAAQ,EAAE;IACpD,OAAOJ,KAAK,CAACK,QAAQ;EACzB,CAAC,MAAM,IAAIJ,SAAS,CAACE,EAAE,CAACG,KAAK,EAAEA,KAAK,KAAKX,kBAAkB,CAACY,QAAQ,EAAE;IAClE,oBAAOhB,KAAA,CAAAiB,aAAA,CAACZ,yBAAyB,MAAE,CAAC;EACxC;EACA,OAAO,IAAI;AACf,CAAC,CAAC;AAEF,OAAO,MAAMa,gCAAgC,GAAGX,YAAY,CAACY,eAAe,CAACC,QAAQ,IAAI;EACrF,OAAO,SAASC,wCAAwCA,CAACZ,KAAK,EAAE;IAC5D,oBACIT,KAAA,CAAAiB,aAAA,CAACG,QAAQ,EAAAE,MAAA,CAAAC,MAAA,KACDd,KAAK;MACTe,OAAO,eACHxB,KAAA,CAAAiB,aAAA,CAACT,4BAA4B;QAACG,IAAI,EAAEF,KAAK,CAACE;MAAK,GAC1CF,KAAK,CAACe,OACmB;IACjC,EACJ,CAAC;EAEV,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
|