@webiny/app-record-locking 0.0.0-unstable.a4f3e4ea8b → 0.0.0-unstable.a85ef555b2

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.
@@ -1,4 +1,4 @@
1
- export declare const RecordLockingPermissionsFeature: import("@webiny/feature/admin").FeatureDefinition<{
1
+ export declare const RecordLockingPermissionsFeature: import("@webiny/feature/admin/createFeature.js").FeatureDefinition<{
2
2
  permissions: {
3
3
  canAccess: (entityId: never) => boolean;
4
4
  canAction: (action: string, entityId: never) => boolean;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import react from "react";
2
- import { RegisterFeature, useWcp } from "@webiny/app-admin";
2
+ import { RegisterFeature, useFeatureFlags } from "@webiny/app-admin";
3
3
  import { RecordLockingFeature } from "./features/feature.js";
4
4
  import { RecordLockingPermissionsFeature } from "./features/permissions/feature.js";
5
5
  import { RecordLockingPresenterFeature } from "./presentation/entryLocking/feature.js";
@@ -7,8 +7,8 @@ import { ListLockRecordsPresenterFeature } from "./presentation/listLocking/feat
7
7
  import { SecurityPermissions } from "./SecurityPermissions.js";
8
8
  import { RecordLockingModule } from "./RecordLockingModule.js";
9
9
  const RecordLocking = ()=>{
10
- const wcp = useWcp();
11
- if (!wcp.canUseRecordLocking()) return null;
10
+ const featureFlags = useFeatureFlags();
11
+ if (!featureFlags.isEnabled("recordLocking")) return null;
12
12
  return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
13
13
  feature: RecordLockingPermissionsFeature
14
14
  }), /*#__PURE__*/ react.createElement(RegisterFeature, {
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { RegisterFeature } from \"@webiny/app-admin\";\nimport { useWcp } from \"@webiny/app-admin\";\nimport { RecordLockingFeature } from \"~/features/feature.js\";\nimport { RecordLockingPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { RecordLockingPresenterFeature } from \"~/presentation/entryLocking/feature.js\";\nimport { ListLockRecordsPresenterFeature } from \"~/presentation/listLocking/feature.js\";\nimport { SecurityPermissions } from \"~/SecurityPermissions.js\";\nimport { RecordLockingModule } from \"~/RecordLockingModule.js\";\n\nexport const RecordLocking = () => {\n const wcp = useWcp();\n\n if (!wcp.canUseRecordLocking()) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={RecordLockingPermissionsFeature} />\n <RegisterFeature feature={RecordLockingFeature} />\n <RegisterFeature feature={RecordLockingPresenterFeature} />\n <RegisterFeature feature={ListLockRecordsPresenterFeature} />\n <SecurityPermissions />\n <RecordLockingModule />\n </>\n );\n};\n"],"names":["RecordLocking","wcp","useWcp","RegisterFeature","RecordLockingPermissionsFeature","RecordLockingFeature","RecordLockingPresenterFeature","ListLockRecordsPresenterFeature","SecurityPermissions","RecordLockingModule"],"mappings":";;;;;;;;AAUO,MAAMA,gBAAgB;IACzB,MAAMC,MAAMC;IAEZ,IAAI,CAACD,IAAI,mBAAmB,IACxB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACE,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACF,iBAAeA;QAAC,SAASG;sBAC1B,oBAACH,iBAAeA;QAAC,SAASI;sBAC1B,oBAACC,qBAAmBA,OAAAA,WAAAA,GACpB,oBAACC,qBAAmBA;AAGhC"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { RegisterFeature } from \"@webiny/app-admin\";\nimport { useFeatureFlags } from \"@webiny/app-admin\";\nimport { RecordLockingFeature } from \"~/features/feature.js\";\nimport { RecordLockingPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { RecordLockingPresenterFeature } from \"~/presentation/entryLocking/feature.js\";\nimport { ListLockRecordsPresenterFeature } from \"~/presentation/listLocking/feature.js\";\nimport { SecurityPermissions } from \"~/SecurityPermissions.js\";\nimport { RecordLockingModule } from \"~/RecordLockingModule.js\";\n\nexport const RecordLocking = () => {\n const featureFlags = useFeatureFlags();\n\n if (!featureFlags.isEnabled(\"recordLocking\")) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={RecordLockingPermissionsFeature} />\n <RegisterFeature feature={RecordLockingFeature} />\n <RegisterFeature feature={RecordLockingPresenterFeature} />\n <RegisterFeature feature={ListLockRecordsPresenterFeature} />\n <SecurityPermissions />\n <RecordLockingModule />\n </>\n );\n};\n"],"names":["RecordLocking","featureFlags","useFeatureFlags","RegisterFeature","RecordLockingPermissionsFeature","RecordLockingFeature","RecordLockingPresenterFeature","ListLockRecordsPresenterFeature","SecurityPermissions","RecordLockingModule"],"mappings":";;;;;;;;AAUO,MAAMA,gBAAgB;IACzB,MAAMC,eAAeC;IAErB,IAAI,CAACD,aAAa,SAAS,CAAC,kBACxB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACE,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACF,iBAAeA;QAAC,SAASG;sBAC1B,oBAACH,iBAAeA;QAAC,SAASI;sBAC1B,oBAACC,qBAAmBA,OAAAA,WAAAA,GACpB,oBAACC,qBAAmBA;AAGhC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-record-locking",
3
- "version": "0.0.0-unstable.a4f3e4ea8b",
3
+ "version": "0.0.0-unstable.a85ef555b2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -17,21 +17,21 @@
17
17
  ],
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
- "@webiny/admin-ui": "0.0.0-unstable.a4f3e4ea8b",
21
- "@webiny/app": "0.0.0-unstable.a4f3e4ea8b",
22
- "@webiny/app-admin": "0.0.0-unstable.a4f3e4ea8b",
23
- "@webiny/app-headless-cms": "0.0.0-unstable.a4f3e4ea8b",
24
- "@webiny/app-websockets": "0.0.0-unstable.a4f3e4ea8b",
25
- "@webiny/feature": "0.0.0-unstable.a4f3e4ea8b",
26
- "@webiny/icons": "0.0.0-unstable.a4f3e4ea8b",
27
- "@webiny/utils": "0.0.0-unstable.a4f3e4ea8b",
28
- "mobx": "6.16.1",
29
- "mobx-react-lite": "4.1.1",
20
+ "@webiny/admin-ui": "0.0.0-unstable.a85ef555b2",
21
+ "@webiny/app": "0.0.0-unstable.a85ef555b2",
22
+ "@webiny/app-admin": "0.0.0-unstable.a85ef555b2",
23
+ "@webiny/app-headless-cms": "0.0.0-unstable.a85ef555b2",
24
+ "@webiny/app-websockets": "0.0.0-unstable.a85ef555b2",
25
+ "@webiny/feature": "0.0.0-unstable.a85ef555b2",
26
+ "@webiny/icons": "0.0.0-unstable.a85ef555b2",
27
+ "@webiny/utils": "0.0.0-unstable.a85ef555b2",
28
+ "mobx": "7.0.3",
29
+ "mobx-react-lite": "5.0.3",
30
30
  "react": "18.3.1",
31
31
  "react-dom": "18.3.1"
32
32
  },
33
33
  "devDependencies": {
34
- "@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
34
+ "@webiny/build-tools": "0.0.0-unstable.a85ef555b2",
35
35
  "rimraf": "6.1.3",
36
36
  "typescript": "7.0.2"
37
37
  },
@@ -6,7 +6,7 @@ interface RecordLockingGuardProps {
6
6
  onNavigateBack: () => void;
7
7
  children: React.ReactNode;
8
8
  }
9
- export declare const RecordLockingGuard: (({ entryId, modelId, entryTitle, onNavigateBack, children }: RecordLockingGuardProps) => React.JSX.Element) & {
10
- displayName: string;
9
+ export declare const RecordLockingGuard: (({ entryId, modelId, entryTitle, onNavigateBack, children }: RecordLockingGuardProps) => React.JSX.Element) & React.NamedExoticComponent<RecordLockingGuardProps> & {
10
+ readonly type: ({ entryId, modelId, entryTitle, onNavigateBack, children }: RecordLockingGuardProps) => React.JSX.Element;
11
11
  };
12
12
  export {};
@@ -17,6 +17,7 @@ declare class ContentEntriesPresenterWithLocking implements IContentEntriesPrese
17
17
  publishEntry(id: string): Promise<boolean>;
18
18
  unpublishEntry(id: string): Promise<boolean>;
19
19
  moveEntry(id: string, folderId: string): Promise<boolean>;
20
+ duplicateEntry(entry: Parameters<IContentEntriesPresenter["duplicateEntry"]>[0]): Promise<false | import("@webiny/app-headless-cms/presentation/contentEntries/list/abstractions.js").IDuplicateEntryResult>;
20
21
  }
21
22
  export declare const ContentEntriesPresenterLockingDecorator: typeof ContentEntriesPresenterWithLocking & {
22
23
  __abstraction: import("@webiny/di").Abstraction<IContentEntriesPresenter>;
@@ -1,4 +1,4 @@
1
- import { comparer, reaction } from "mobx";
1
+ import { compareStructural, reaction } from "mobx";
2
2
  import { ContentEntriesPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/list/abstractions.js";
3
3
  import { ListLockRecordsPresenter } from "./abstractions.js";
4
4
  class ContentEntriesPresenterWithLocking {
@@ -23,7 +23,7 @@ class ContentEntriesPresenterWithLocking {
23
23
  this.lockRecordsPresenter.fetchForEntries(entryIds, this.original.vm.model.modelId);
24
24
  }, {
25
25
  fireImmediately: true,
26
- equals: comparer.structural
26
+ equals: compareStructural
27
27
  });
28
28
  }
29
29
  dispose() {
@@ -55,6 +55,9 @@ class ContentEntriesPresenterWithLocking {
55
55
  moveEntry(id, folderId) {
56
56
  return this.original.moveEntry(id, folderId);
57
57
  }
58
+ duplicateEntry(entry) {
59
+ return this.original.duplicateEntry(entry);
60
+ }
58
61
  }
59
62
  const ContentEntriesPresenterLockingDecorator = ContentEntriesPresenter.createDecorator({
60
63
  decorator: ContentEntriesPresenterWithLocking,
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/listLocking/ContentEntriesPresenterDecorator.js","sources":["../../../src/presentation/listLocking/ContentEntriesPresenterDecorator.ts"],"sourcesContent":["import { comparer, reaction } from \"mobx\";\nimport type { IReactionDisposer } from \"mobx\";\nimport {\n ContentEntriesPresenter,\n type IContentEntriesPresenter,\n type IContentEntriesInitConfig\n} from \"@webiny/app-headless-cms/presentation/contentEntries/list/abstractions.js\";\nimport { ListLockRecordsPresenter } from \"./abstractions.js\";\n\nclass ContentEntriesPresenterWithLocking implements IContentEntriesPresenter {\n private _disposeReaction: IReactionDisposer | null = null;\n\n constructor(\n private lockRecordsPresenter: ListLockRecordsPresenter.Interface,\n private original: IContentEntriesPresenter\n ) {}\n\n get vm() {\n return this.original.vm;\n }\n\n get list() {\n return this.original.list;\n }\n\n get folders() {\n return this.original.folders;\n }\n\n init(config?: IContentEntriesInitConfig): void {\n this.original.init(config);\n\n this._disposeReaction = reaction(\n () => this.original.list.vm.rows.map(r => r.id),\n entryIds => {\n if (entryIds.length === 0) {\n return;\n }\n this.lockRecordsPresenter.fetchForEntries(entryIds, this.original.vm.model.modelId);\n },\n { fireImmediately: true, equals: comparer.structural }\n );\n }\n\n dispose(): void {\n if (this._disposeReaction) {\n this._disposeReaction();\n this._disposeReaction = null;\n }\n this.lockRecordsPresenter.dispose();\n this.original.dispose();\n }\n\n selectEntry(id: string) {\n this.original.selectEntry(id);\n }\n\n deselectEntry() {\n this.original.deselectEntry();\n }\n\n createEntry() {\n this.original.createEntry();\n }\n\n deleteEntry(id: string) {\n return this.original.deleteEntry(id);\n }\n\n publishEntry(id: string) {\n return this.original.publishEntry(id);\n }\n\n unpublishEntry(id: string) {\n return this.original.unpublishEntry(id);\n }\n\n moveEntry(id: string, folderId: string) {\n return this.original.moveEntry(id, folderId);\n }\n}\n\nexport const ContentEntriesPresenterLockingDecorator = ContentEntriesPresenter.createDecorator({\n decorator: ContentEntriesPresenterWithLocking,\n dependencies: [ListLockRecordsPresenter]\n});\n"],"names":["ContentEntriesPresenterWithLocking","lockRecordsPresenter","original","config","reaction","r","entryIds","comparer","id","folderId","ContentEntriesPresenterLockingDecorator","ContentEntriesPresenter","ListLockRecordsPresenter"],"mappings":";;;AASA,MAAMA;IAGF,YACYC,oBAAwD,EACxDC,QAAkC,CAC5C;aAFUD,oBAAoB,GAApBA;aACAC,QAAQ,GAARA;aAJJ,gBAAgB,GAA6B;IAKlD;IAEH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;IAC3B;IAEA,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC7B;IAEA,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;IAChC;IAEA,KAAKC,MAAkC,EAAQ;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAACA;QAEnB,IAAI,CAAC,gBAAgB,GAAGC,SACpB,IAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAACC,CAAAA,IAAKA,EAAE,EAAE,GAC9CC,CAAAA;YACI,IAAIA,AAAoB,MAApBA,SAAS,MAAM,EACf;YAEJ,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAACA,UAAU,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO;QACtF,GACA;YAAE,iBAAiB;YAAM,QAAQC,SAAS,UAAU;QAAC;IAE7D;IAEA,UAAgB;QACZ,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,gBAAgB;YACrB,IAAI,CAAC,gBAAgB,GAAG;QAC5B;QACA,IAAI,CAAC,oBAAoB,CAAC,OAAO;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO;IACzB;IAEA,YAAYC,EAAU,EAAE;QACpB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACA;IAC9B;IAEA,gBAAgB;QACZ,IAAI,CAAC,QAAQ,CAAC,aAAa;IAC/B;IAEA,cAAc;QACV,IAAI,CAAC,QAAQ,CAAC,WAAW;IAC7B;IAEA,YAAYA,EAAU,EAAE;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACA;IACrC;IAEA,aAAaA,EAAU,EAAE;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAACA;IACtC;IAEA,eAAeA,EAAU,EAAE;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAACA;IACxC;IAEA,UAAUA,EAAU,EAAEC,QAAgB,EAAE;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAACD,IAAIC;IACvC;AACJ;AAEO,MAAMC,0CAA0CC,wBAAwB,eAAe,CAAC;IAC3F,WAAWX;IACX,cAAc;QAACY;KAAyB;AAC5C"}
1
+ {"version":3,"file":"presentation/listLocking/ContentEntriesPresenterDecorator.js","sources":["../../../src/presentation/listLocking/ContentEntriesPresenterDecorator.ts"],"sourcesContent":["import { compareStructural, reaction } from \"mobx\";\nimport type { IReactionDisposer } from \"mobx\";\nimport {\n ContentEntriesPresenter,\n type IContentEntriesPresenter,\n type IContentEntriesInitConfig\n} from \"@webiny/app-headless-cms/presentation/contentEntries/list/abstractions.js\";\nimport { ListLockRecordsPresenter } from \"./abstractions.js\";\n\nclass ContentEntriesPresenterWithLocking implements IContentEntriesPresenter {\n private _disposeReaction: IReactionDisposer | null = null;\n\n constructor(\n private lockRecordsPresenter: ListLockRecordsPresenter.Interface,\n private original: IContentEntriesPresenter\n ) {}\n\n get vm() {\n return this.original.vm;\n }\n\n get list() {\n return this.original.list;\n }\n\n get folders() {\n return this.original.folders;\n }\n\n init(config?: IContentEntriesInitConfig): void {\n this.original.init(config);\n\n this._disposeReaction = reaction(\n () => this.original.list.vm.rows.map(r => r.id),\n entryIds => {\n if (entryIds.length === 0) {\n return;\n }\n this.lockRecordsPresenter.fetchForEntries(entryIds, this.original.vm.model.modelId);\n },\n { fireImmediately: true, equals: compareStructural }\n );\n }\n\n dispose(): void {\n if (this._disposeReaction) {\n this._disposeReaction();\n this._disposeReaction = null;\n }\n this.lockRecordsPresenter.dispose();\n this.original.dispose();\n }\n\n selectEntry(id: string) {\n this.original.selectEntry(id);\n }\n\n deselectEntry() {\n this.original.deselectEntry();\n }\n\n createEntry() {\n this.original.createEntry();\n }\n\n deleteEntry(id: string) {\n return this.original.deleteEntry(id);\n }\n\n publishEntry(id: string) {\n return this.original.publishEntry(id);\n }\n\n unpublishEntry(id: string) {\n return this.original.unpublishEntry(id);\n }\n\n moveEntry(id: string, folderId: string) {\n return this.original.moveEntry(id, folderId);\n }\n\n duplicateEntry(entry: Parameters<IContentEntriesPresenter[\"duplicateEntry\"]>[0]) {\n return this.original.duplicateEntry(entry);\n }\n}\n\nexport const ContentEntriesPresenterLockingDecorator = ContentEntriesPresenter.createDecorator({\n decorator: ContentEntriesPresenterWithLocking,\n dependencies: [ListLockRecordsPresenter]\n});\n"],"names":["ContentEntriesPresenterWithLocking","lockRecordsPresenter","original","config","reaction","r","entryIds","compareStructural","id","folderId","entry","ContentEntriesPresenterLockingDecorator","ContentEntriesPresenter","ListLockRecordsPresenter"],"mappings":";;;AASA,MAAMA;IAGF,YACYC,oBAAwD,EACxDC,QAAkC,CAC5C;aAFUD,oBAAoB,GAApBA;aACAC,QAAQ,GAARA;aAJJ,gBAAgB,GAA6B;IAKlD;IAEH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;IAC3B;IAEA,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC7B;IAEA,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;IAChC;IAEA,KAAKC,MAAkC,EAAQ;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAACA;QAEnB,IAAI,CAAC,gBAAgB,GAAGC,SACpB,IAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAACC,CAAAA,IAAKA,EAAE,EAAE,GAC9CC,CAAAA;YACI,IAAIA,AAAoB,MAApBA,SAAS,MAAM,EACf;YAEJ,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAACA,UAAU,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO;QACtF,GACA;YAAE,iBAAiB;YAAM,QAAQC;QAAkB;IAE3D;IAEA,UAAgB;QACZ,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,gBAAgB;YACrB,IAAI,CAAC,gBAAgB,GAAG;QAC5B;QACA,IAAI,CAAC,oBAAoB,CAAC,OAAO;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO;IACzB;IAEA,YAAYC,EAAU,EAAE;QACpB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACA;IAC9B;IAEA,gBAAgB;QACZ,IAAI,CAAC,QAAQ,CAAC,aAAa;IAC/B;IAEA,cAAc;QACV,IAAI,CAAC,QAAQ,CAAC,WAAW;IAC7B;IAEA,YAAYA,EAAU,EAAE;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACA;IACrC;IAEA,aAAaA,EAAU,EAAE;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAACA;IACtC;IAEA,eAAeA,EAAU,EAAE;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAACA;IACxC;IAEA,UAAUA,EAAU,EAAEC,QAAgB,EAAE;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAACD,IAAIC;IACvC;IAEA,eAAeC,KAAgE,EAAE;QAC7E,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAACA;IACxC;AACJ;AAEO,MAAMC,0CAA0CC,wBAAwB,eAAe,CAAC;IAC3F,WAAWZ;IACX,cAAc;QAACa;KAAyB;AAC5C"}
@@ -1,3 +1,4 @@
1
- export declare const ListLockRecordsSync: (() => null) & {
2
- displayName: string;
1
+ import React from "react";
2
+ export declare const ListLockRecordsSync: (() => null) & React.NamedExoticComponent<unknown> & {
3
+ readonly type: () => null;
3
4
  };