@esri/hub-common 12.11.0 → 12.13.0

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.
Files changed (99) hide show
  1. package/dist/esm/capabilities/getWorkspaceCapabilities.js +2 -0
  2. package/dist/esm/capabilities/getWorkspaceCapabilities.js.map +1 -1
  3. package/dist/esm/core/HubItemEntity.js +7 -0
  4. package/dist/esm/core/HubItemEntity.js.map +1 -1
  5. package/dist/esm/core/_internal/getBasePropertyMap.js +1 -0
  6. package/dist/esm/core/_internal/getBasePropertyMap.js.map +1 -1
  7. package/dist/esm/core/fetchHubEntity.js +4 -0
  8. package/dist/esm/core/fetchHubEntity.js.map +1 -1
  9. package/dist/esm/core/getTypeFromEntity.js +3 -0
  10. package/dist/esm/core/getTypeFromEntity.js.map +1 -1
  11. package/dist/esm/core/types/IHubDiscussion.js +1 -0
  12. package/dist/esm/core/types/IHubDiscussion.js.map +1 -0
  13. package/dist/esm/core/types/index.js +1 -0
  14. package/dist/esm/core/types/index.js.map +1 -1
  15. package/dist/esm/discussions/HubDiscussion.js +107 -0
  16. package/dist/esm/discussions/HubDiscussion.js.map +1 -0
  17. package/dist/esm/discussions/_internal/DiscussionBusinessRules.js +79 -0
  18. package/dist/esm/discussions/_internal/DiscussionBusinessRules.js.map +1 -0
  19. package/dist/esm/discussions/_internal/computeProps.js +31 -0
  20. package/dist/esm/discussions/_internal/computeProps.js.map +1 -0
  21. package/dist/esm/discussions/_internal/getPropertyMap.js +13 -0
  22. package/dist/esm/discussions/_internal/getPropertyMap.js.map +1 -0
  23. package/dist/esm/discussions/defaults.js +30 -0
  24. package/dist/esm/discussions/defaults.js.map +1 -0
  25. package/dist/esm/discussions/edit.js +82 -0
  26. package/dist/esm/discussions/edit.js.map +1 -0
  27. package/dist/esm/discussions/fetch.js +44 -0
  28. package/dist/esm/discussions/fetch.js.map +1 -0
  29. package/dist/esm/discussions/index.js +4 -0
  30. package/dist/esm/discussions/index.js.map +1 -0
  31. package/dist/esm/index.js +1 -0
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/permissions/HubPermissionPolicies.js +2 -0
  34. package/dist/esm/permissions/HubPermissionPolicies.js.map +1 -1
  35. package/dist/esm/permissions/types/Permission.js +2 -0
  36. package/dist/esm/permissions/types/Permission.js.map +1 -1
  37. package/dist/esm/versioning/updateVersion.js +22 -1
  38. package/dist/esm/versioning/updateVersion.js.map +1 -1
  39. package/dist/esm/versioning/utils.js +16 -0
  40. package/dist/esm/versioning/utils.js.map +1 -1
  41. package/dist/node/capabilities/getWorkspaceCapabilities.js +2 -0
  42. package/dist/node/capabilities/getWorkspaceCapabilities.js.map +1 -1
  43. package/dist/node/core/HubItemEntity.js +7 -0
  44. package/dist/node/core/HubItemEntity.js.map +1 -1
  45. package/dist/node/core/_internal/getBasePropertyMap.js +1 -0
  46. package/dist/node/core/_internal/getBasePropertyMap.js.map +1 -1
  47. package/dist/node/core/fetchHubEntity.js +4 -0
  48. package/dist/node/core/fetchHubEntity.js.map +1 -1
  49. package/dist/node/core/getTypeFromEntity.js +3 -0
  50. package/dist/node/core/getTypeFromEntity.js.map +1 -1
  51. package/dist/node/core/types/IHubDiscussion.js +3 -0
  52. package/dist/node/core/types/IHubDiscussion.js.map +1 -0
  53. package/dist/node/core/types/index.js +1 -0
  54. package/dist/node/core/types/index.js.map +1 -1
  55. package/dist/node/discussions/HubDiscussion.js +111 -0
  56. package/dist/node/discussions/HubDiscussion.js.map +1 -0
  57. package/dist/node/discussions/_internal/DiscussionBusinessRules.js +82 -0
  58. package/dist/node/discussions/_internal/DiscussionBusinessRules.js.map +1 -0
  59. package/dist/node/discussions/_internal/computeProps.js +35 -0
  60. package/dist/node/discussions/_internal/computeProps.js.map +1 -0
  61. package/dist/node/discussions/_internal/getPropertyMap.js +17 -0
  62. package/dist/node/discussions/_internal/getPropertyMap.js.map +1 -0
  63. package/dist/node/discussions/defaults.js +33 -0
  64. package/dist/node/discussions/defaults.js.map +1 -0
  65. package/dist/node/discussions/edit.js +88 -0
  66. package/dist/node/discussions/edit.js.map +1 -0
  67. package/dist/node/discussions/fetch.js +49 -0
  68. package/dist/node/discussions/fetch.js.map +1 -0
  69. package/dist/node/discussions/index.js +7 -0
  70. package/dist/node/discussions/index.js.map +1 -0
  71. package/dist/node/index.js +1 -0
  72. package/dist/node/index.js.map +1 -1
  73. package/dist/node/permissions/HubPermissionPolicies.js +2 -0
  74. package/dist/node/permissions/HubPermissionPolicies.js.map +1 -1
  75. package/dist/node/permissions/types/Permission.js +2 -0
  76. package/dist/node/permissions/types/Permission.js.map +1 -1
  77. package/dist/node/versioning/updateVersion.js +22 -1
  78. package/dist/node/versioning/updateVersion.js.map +1 -1
  79. package/dist/node/versioning/utils.js +18 -1
  80. package/dist/node/versioning/utils.js.map +1 -1
  81. package/dist/types/content/_internal.d.ts +1 -0
  82. package/dist/types/core/HubItemEntity.d.ts +5 -0
  83. package/dist/types/core/types/HubEntityType.d.ts +1 -1
  84. package/dist/types/core/types/IHubDiscussion.d.ts +8 -0
  85. package/dist/types/core/types/IHubItemEntity.d.ts +4 -0
  86. package/dist/types/core/types/index.d.ts +1 -0
  87. package/dist/types/discussions/HubDiscussion.d.ts +44 -0
  88. package/dist/types/discussions/_internal/DiscussionBusinessRules.d.ts +27 -0
  89. package/dist/types/discussions/_internal/computeProps.d.ts +12 -0
  90. package/dist/types/discussions/_internal/getPropertyMap.d.ts +8 -0
  91. package/dist/types/discussions/defaults.d.ts +11 -0
  92. package/dist/types/discussions/edit.d.ts +29 -0
  93. package/dist/types/discussions/fetch.d.ts +20 -0
  94. package/dist/types/discussions/index.d.ts +3 -0
  95. package/dist/types/index.d.ts +1 -0
  96. package/dist/types/permissions/types/Permission.d.ts +2 -2
  97. package/dist/types/versioning/updateVersion.d.ts +3 -1
  98. package/dist/types/versioning/utils.d.ts +14 -1
  99. package/package.json +1 -1
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteDiscussion = exports.updateDiscussion = exports.createDiscussion = void 0;
4
+ const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
5
+ const models_1 = require("../models");
6
+ const slugs_1 = require("../items/slugs");
7
+ const index_1 = require("../index");
8
+ const PropertyMapper_1 = require("../core/_internal/PropertyMapper");
9
+ const getPropertyMap_1 = require("./_internal/getPropertyMap");
10
+ const computeProps_1 = require("./_internal/computeProps");
11
+ const defaults_1 = require("./defaults");
12
+ /**
13
+ * @private
14
+ * Create a new Hub Discussion item
15
+ *
16
+ * Minimal properties are name and orgUrlKey
17
+ *
18
+ * @param partialDiscussion a partial discussion
19
+ * @param requestOptions user request options
20
+ * @returns promise that resolves a IHubDiscussion
21
+ */
22
+ async function createDiscussion(partialDiscussion, requestOptions) {
23
+ // merge incoming with the default
24
+ // this expansion solves the typing somehow
25
+ const discussion = Object.assign(Object.assign({}, defaults_1.DEFAULT_DISCUSSION), partialDiscussion);
26
+ // Create a slug from the title if one is not passed in
27
+ if (!discussion.slug) {
28
+ discussion.slug = slugs_1.constructSlug(discussion.name, discussion.orgUrlKey);
29
+ }
30
+ // Ensure slug is unique
31
+ discussion.slug = await slugs_1.getUniqueSlug({ slug: discussion.slug }, requestOptions);
32
+ // add slug to keywords
33
+ discussion.typeKeywords = slugs_1.setSlugKeyword(discussion.typeKeywords, discussion.slug);
34
+ // Map discussion object onto a default discussion Model
35
+ const mapper = new PropertyMapper_1.PropertyMapper(getPropertyMap_1.getPropertyMap());
36
+ // create model from object, using the default model as a starting point
37
+ let model = mapper.objectToModel(discussion, index_1.cloneObject(defaults_1.DEFAULT_DISCUSSION_MODEL));
38
+ // create the item
39
+ model = await models_1.createModel(model, requestOptions);
40
+ // map the model back into a IHubDiscussion
41
+ let newDiscussion = mapper.modelToObject(model, {});
42
+ newDiscussion = computeProps_1.computeProps(model, newDiscussion, requestOptions);
43
+ // and return it
44
+ return newDiscussion;
45
+ }
46
+ exports.createDiscussion = createDiscussion;
47
+ /**
48
+ * @private
49
+ * Update a Hub Discussion
50
+ * @param discussion the discussion to update
51
+ * @param requestOptions user request options
52
+ * @returns promise that resolves a IHubDiscussion
53
+ */
54
+ async function updateDiscussion(discussion, requestOptions) {
55
+ // verify that the slug is unique, excluding the current discussion
56
+ discussion.slug = await slugs_1.getUniqueSlug({ slug: discussion.slug, existingId: discussion.id }, requestOptions);
57
+ // get the backing item & data
58
+ const model = await models_1.getModel(discussion.id, requestOptions);
59
+ // create the PropertyMapper
60
+ const mapper = new PropertyMapper_1.PropertyMapper(getPropertyMap_1.getPropertyMap());
61
+ // Note: Although we are fetching the model, and applying changes onto it,
62
+ // we are not attempting to handle "concurrent edit" conflict resolution
63
+ // but this is where we would apply that sort of logic
64
+ const modelToUpdate = mapper.objectToModel(discussion, model);
65
+ // update the backing item
66
+ const updatedModel = await models_1.updateModel(modelToUpdate, requestOptions);
67
+ // now map back into a discussion and return that
68
+ let updatedDiscussion = mapper.modelToObject(updatedModel, discussion);
69
+ updatedDiscussion = computeProps_1.computeProps(model, updatedDiscussion, requestOptions);
70
+ // the casting is needed because modelToObject returns a `Partial<T>`
71
+ // where as this function returns a `T`
72
+ return updatedDiscussion;
73
+ }
74
+ exports.updateDiscussion = updateDiscussion;
75
+ /**
76
+ * @private
77
+ * Remove a Hub Discussion
78
+ * @param id the discussion item id
79
+ * @param requestOptions request options
80
+ * @returns a promise
81
+ */
82
+ async function deleteDiscussion(id, requestOptions) {
83
+ const ro = Object.assign(Object.assign({}, requestOptions), { id });
84
+ await arcgis_rest_portal_1.removeItem(ro);
85
+ return;
86
+ }
87
+ exports.deleteDiscussion = deleteDiscussion;
88
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/discussions/edit.ts"],"names":[],"mappings":";;;AACA,iEAAwE;AAExE,sCAA+D;AAC/D,0CAA8E;AAC9E,oCAAuC;AACvC,qEAAkE;AAClE,+DAA4D;AAC5D,2DAAwD;AACxD,yCAA0E;AAE1E;;;;;;;;;GASG;AACI,KAAK,UAAU,gBAAgB,CACpC,iBAA0C,EAC1C,cAAmC;IAEnC,kCAAkC;IAClC,2CAA2C;IAC3C,MAAM,UAAU,mCAAQ,6BAAkB,GAAK,iBAAiB,CAAE,CAAC;IAEnE,uDAAuD;IACvD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACpB,UAAU,CAAC,IAAI,GAAG,qBAAa,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;KACxE;IACD,yBAAyB;IACzB,UAAU,CAAC,IAAI,GAAG,MAAM,qBAAa,CACnC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EACzB,cAAc,CACf,CAAC;IACF,uBAAuB;IACvB,UAAU,CAAC,YAAY,GAAG,sBAAc,CACtC,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,IAAI,CAChB,CAAC;IACF,wDAAwD;IACxD,MAAM,MAAM,GAAG,IAAI,+BAAc,CAA0B,+BAAc,EAAE,CAAC,CAAC;IAC7E,wEAAwE;IACxE,IAAI,KAAK,GAAG,MAAM,CAAC,aAAa,CAC9B,UAAU,EACV,mBAAW,CAAC,mCAAwB,CAAC,CACtC,CAAC;IACF,kBAAkB;IAClB,KAAK,GAAG,MAAM,oBAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACjD,2CAA2C;IAC3C,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpD,aAAa,GAAG,2BAAY,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IACnE,gBAAgB;IAChB,OAAO,aAA+B,CAAC;AACzC,CAAC;AApCD,4CAoCC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,gBAAgB,CACpC,UAA0B,EAC1B,cAAmC;IAEnC,mEAAmE;IACnE,UAAU,CAAC,IAAI,GAAG,MAAM,qBAAa,CACnC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EACpD,cAAc,CACf,CAAC;IACF,8BAA8B;IAC9B,MAAM,KAAK,GAAG,MAAM,iBAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5D,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,+BAAc,CAA0B,+BAAc,EAAE,CAAC,CAAC;IAC7E,0EAA0E;IAC1E,wEAAwE;IACxE,sDAAsD;IACtD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9D,0BAA0B;IAC1B,MAAM,YAAY,GAAG,MAAM,oBAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACtE,iDAAiD;IACjD,IAAI,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACvE,iBAAiB,GAAG,2BAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC;IAC3E,qEAAqE;IACrE,uCAAuC;IACvC,OAAO,iBAAmC,CAAC;AAC7C,CAAC;AAzBD,4CAyBC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,gBAAgB,CACpC,EAAU,EACV,cAAmC;IAEnC,MAAM,EAAE,GAAG,gCAAK,cAAc,GAAK,EAAE,EAAE,EAAE,CAAsB,CAAC;IAChE,MAAM,+BAAU,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO;AACT,CAAC;AAPD,4CAOC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertItemToDiscussion = exports.fetchDiscussion = void 0;
4
+ const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
5
+ const models_1 = require("../models");
6
+ const slugs_1 = require("../items/slugs");
7
+ const index_1 = require("../index");
8
+ const PropertyMapper_1 = require("../core/_internal/PropertyMapper");
9
+ const getPropertyMap_1 = require("./_internal/getPropertyMap");
10
+ const computeProps_1 = require("./_internal/computeProps");
11
+ /**
12
+ * @private
13
+ * Get a Discussion by id or slug
14
+ * @param identifier item id or slug
15
+ * @param requestOptions request options
16
+ * @returns a promise that resolves a IHubDiscussion
17
+ */
18
+ async function fetchDiscussion(identifier, requestOptions) {
19
+ let getPrms;
20
+ if (index_1.isGuid(identifier)) {
21
+ // get item by id
22
+ getPrms = arcgis_rest_portal_1.getItem(identifier, requestOptions);
23
+ }
24
+ else {
25
+ getPrms = slugs_1.getItemBySlug(identifier, requestOptions);
26
+ }
27
+ return getPrms.then((item) => {
28
+ if (!item)
29
+ return null;
30
+ return convertItemToDiscussion(item, requestOptions);
31
+ });
32
+ }
33
+ exports.fetchDiscussion = fetchDiscussion;
34
+ /**
35
+ * @private
36
+ * Convert a Hub Discussion Item into a Hub Discussion, fetching any additional
37
+ * information that may be required
38
+ * @param item the discussion item
39
+ * @param auth request options
40
+ * @returns a promise that resolves a IHubDiscussion
41
+ */
42
+ async function convertItemToDiscussion(item, requestOptions) {
43
+ const model = await models_1.fetchModelFromItem(item, requestOptions);
44
+ const mapper = new PropertyMapper_1.PropertyMapper(getPropertyMap_1.getPropertyMap());
45
+ const discussion = mapper.modelToObject(model, {});
46
+ return computeProps_1.computeProps(model, discussion, requestOptions);
47
+ }
48
+ exports.convertItemToDiscussion = convertItemToDiscussion;
49
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/discussions/fetch.ts"],"names":[],"mappings":";;;AACA,iEAA0D;AAE1D,sCAA+C;AAC/C,0CAA+C;AAC/C,oCAAkC;AAClC,qEAAkE;AAClE,+DAA4D;AAC5D,2DAAwD;AAExD;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,cAA+B;IAE/B,IAAI,OAAO,CAAC;IACZ,IAAI,cAAM,CAAC,UAAU,CAAC,EAAE;QACtB,iBAAiB;QACjB,OAAO,GAAG,4BAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;KAC/C;SAAM;QACL,OAAO,GAAG,qBAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;KACrD;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,uBAAuB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAfD,0CAeC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,uBAAuB,CAC3C,IAAW,EACX,cAA+B;IAE/B,MAAM,KAAK,GAAG,MAAM,2BAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,+BAAc,CAA0B,+BAAc,EAAE,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAmB,CAAC;IACrE,OAAO,2BAAY,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AACzD,CAAC;AARD,0DAQC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./HubDiscussion"), exports);
5
+ tslib_1.__exportStar(require("./edit"), exports);
6
+ tslib_1.__exportStar(require("./fetch"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/discussions/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,iDAAuB;AACvB,kDAAwB"}
@@ -19,6 +19,7 @@ tslib_1.__exportStar(require("./extent"), exports);
19
19
  tslib_1.__exportStar(require("./groups"), exports);
20
20
  tslib_1.__exportStar(require("./i18n"), exports);
21
21
  tslib_1.__exportStar(require("./initiatives"), exports);
22
+ tslib_1.__exportStar(require("./discussions"), exports);
22
23
  tslib_1.__exportStar(require("./items"), exports);
23
24
  tslib_1.__exportStar(require("./models"), exports);
24
25
  tslib_1.__exportStar(require("./objects"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;gBACgB;AAChB,0BAA0B;;;;AAE1B,mDAAyB;AACzB,gDAAsB;AACtB,0DAAgC;AAChC,iEAAuC;AACvC,iDAAuB;AACvB,uDAA6B;AAC7B,oDAA0B;AAC1B,iDAAuB;AACvB,yDAA+B;AAC/B,sDAA4B;AAC5B,mDAAyB;AACzB,mDAAyB;AACzB,iDAAuB;AACvB,wDAA8B;AAC9B,kDAAwB;AACxB,mDAAyB;AACzB,oDAA0B;AAC1B,gDAAsB;AACtB,kDAAwB;AACxB,wDAA8B;AAC9B,qDAA2B;AAC3B,oDAA0B;AAC1B,sDAA4B;AAC5B,mDAAyB;AACzB,kDAAwB;AACxB,oDAA0B;AAC1B,kDAAwB;AACxB,iDAAuB;AACvB,kDAAwB;AACxB,iDAAuB;AACvB,kDAAwB;AACxB,uDAA6B;AAE7B,qDAA8C;AAKrC,yBALF,wBAAc,CAKE;AAJvB,qDAA8C;AAIrB,yBAJlB,wBAAc,CAIkB;AAHvC,yCAAkC;AAGO,mBAHlC,kBAAQ,CAGkC;AACjD,6BAAkC;AAAzB,4FAAA,IAAI,OAAA;AAAE,4FAAA,IAAI,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;gBACgB;AAChB,0BAA0B;;;;AAE1B,mDAAyB;AACzB,gDAAsB;AACtB,0DAAgC;AAChC,iEAAuC;AACvC,iDAAuB;AACvB,uDAA6B;AAC7B,oDAA0B;AAC1B,iDAAuB;AACvB,yDAA+B;AAC/B,sDAA4B;AAC5B,mDAAyB;AACzB,mDAAyB;AACzB,iDAAuB;AACvB,wDAA8B;AAC9B,wDAA8B;AAC9B,kDAAwB;AACxB,mDAAyB;AACzB,oDAA0B;AAC1B,gDAAsB;AACtB,kDAAwB;AACxB,wDAA8B;AAC9B,qDAA2B;AAC3B,oDAA0B;AAC1B,sDAA4B;AAC5B,mDAAyB;AACzB,kDAAwB;AACxB,oDAA0B;AAC1B,kDAAwB;AACxB,iDAAuB;AACvB,kDAAwB;AACxB,iDAAuB;AACvB,kDAAwB;AACxB,uDAA6B;AAE7B,qDAA8C;AAKrC,yBALF,wBAAc,CAKE;AAJvB,qDAA8C;AAIrB,yBAJlB,wBAAc,CAIkB;AAHvC,yCAAkC;AAGO,mBAHlC,kBAAQ,CAGkC;AACjD,6BAAkC;AAAzB,4FAAA,IAAI,OAAA;AAAE,4FAAA,IAAI,OAAA"}
@@ -4,6 +4,7 @@ exports.getPermissionPolicy = exports.HubPermissionsPolicies = void 0;
4
4
  const InitiativeBusinessRules_1 = require("../initiatives/_internal/InitiativeBusinessRules");
5
5
  const ProjectBusinessRules_1 = require("../projects/_internal/ProjectBusinessRules");
6
6
  const SiteBusinessRules_1 = require("../sites/_internal/SiteBusinessRules");
7
+ const DiscussionBusinessRules_1 = require("../discussions/_internal/DiscussionBusinessRules");
7
8
  // Examples of possible Permission Policies
8
9
  // const DiscussionPermissionPolicies: IPermissionPolicy[] = [
9
10
  // {
@@ -64,6 +65,7 @@ exports.HubPermissionsPolicies = [
64
65
  ...SiteBusinessRules_1.SitesPermissionPolicies,
65
66
  ...ProjectBusinessRules_1.ProjectPermissionPolicies,
66
67
  ...InitiativeBusinessRules_1.InitiativePermissionPolicies,
68
+ ...DiscussionBusinessRules_1.DiscussionPermissionPolicies,
67
69
  ];
68
70
  /**
69
71
  * Get the policies defined for a specific permission
@@ -1 +1 @@
1
- {"version":3,"file":"HubPermissionPolicies.js","sourceRoot":"","sources":["../../../src/permissions/HubPermissionPolicies.ts"],"names":[],"mappings":";;;AAAA,8FAAgG;AAChG,qFAAuF;AACvF,4EAA+E;AAI/E,2CAA2C;AAC3C,8DAA8D;AAC9D,MAAM;AACN,gDAAgD;AAChD,2BAA2B;AAC3B,mCAAmC;AACnC,8CAA8C;AAC9C,OAAO;AACP,MAAM;AACN,uDAAuD;AACvD,mCAAmC;AACnC,2BAA2B;AAC3B,8CAA8C;AAC9C,oBAAoB;AACpB,UAAU;AACV,iDAAiD;AACjD,gCAAgC;AAChC,kCAAkC;AAClC,WAAW;AACX,UAAU;AACV,2CAA2C;AAC3C,uCAAuC;AACvC,oCAAoC;AACpC,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM;AACN,gDAAgD;AAChD,mCAAmC;AACnC,2BAA2B;AAC3B,8CAA8C;AAC9C,oBAAoB;AACpB,UAAU;AACV,2CAA2C;AAC3C,gCAAgC;AAChC,kCAAkC;AAClC,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM;AACN,6CAA6C;AAC7C,mCAAmC;AACnC,2BAA2B;AAC3B,8CAA8C;AAC9C,oBAAoB;AACpB,UAAU;AACV,2CAA2C;AAC3C,gCAAgC;AAChC,kCAAkC;AAClC,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AAEL;;GAEG;AACU,QAAA,sBAAsB,GAAwB;IACzD,GAAG,2CAAuB;IAC1B,GAAG,gDAAyB;IAC5B,GAAG,sDAA4B;CAChC,CAAC;AAEF;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,UAAsB;IACxD,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AACzE,CAAC;AAFD,kDAEC"}
1
+ {"version":3,"file":"HubPermissionPolicies.js","sourceRoot":"","sources":["../../../src/permissions/HubPermissionPolicies.ts"],"names":[],"mappings":";;;AAAA,8FAAgG;AAChG,qFAAuF;AACvF,4EAA+E;AAC/E,8FAAgG;AAIhG,2CAA2C;AAC3C,8DAA8D;AAC9D,MAAM;AACN,gDAAgD;AAChD,2BAA2B;AAC3B,mCAAmC;AACnC,8CAA8C;AAC9C,OAAO;AACP,MAAM;AACN,uDAAuD;AACvD,mCAAmC;AACnC,2BAA2B;AAC3B,8CAA8C;AAC9C,oBAAoB;AACpB,UAAU;AACV,iDAAiD;AACjD,gCAAgC;AAChC,kCAAkC;AAClC,WAAW;AACX,UAAU;AACV,2CAA2C;AAC3C,uCAAuC;AACvC,oCAAoC;AACpC,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM;AACN,gDAAgD;AAChD,mCAAmC;AACnC,2BAA2B;AAC3B,8CAA8C;AAC9C,oBAAoB;AACpB,UAAU;AACV,2CAA2C;AAC3C,gCAAgC;AAChC,kCAAkC;AAClC,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM;AACN,6CAA6C;AAC7C,mCAAmC;AACnC,2BAA2B;AAC3B,8CAA8C;AAC9C,oBAAoB;AACpB,UAAU;AACV,2CAA2C;AAC3C,gCAAgC;AAChC,kCAAkC;AAClC,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AAEL;;GAEG;AACU,QAAA,sBAAsB,GAAwB;IACzD,GAAG,2CAAuB;IAC1B,GAAG,gDAAyB;IAC5B,GAAG,sDAA4B;IAC/B,GAAG,sDAA4B;CAChC,CAAC;AAEF;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,UAAsB;IACxD,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AACzE,CAAC;AAFD,kDAEC"}
@@ -4,6 +4,7 @@ exports.isPermission = void 0;
4
4
  const ProjectBusinessRules_1 = require("../../projects/_internal/ProjectBusinessRules");
5
5
  const SiteBusinessRules_1 = require("../../sites/_internal/SiteBusinessRules");
6
6
  const InitiativeBusinessRules_1 = require("../../initiatives/_internal/InitiativeBusinessRules");
7
+ const DiscussionBusinessRules_1 = require("../../discussions/_internal/DiscussionBusinessRules");
7
8
  /**
8
9
  * Defines the values for Permissions
9
10
  * It's critical that the arrays defined in the modules use `as const`
@@ -13,6 +14,7 @@ const validPermissions = [
13
14
  ...SiteBusinessRules_1.SitePermissions,
14
15
  ...ProjectBusinessRules_1.ProjectPermissions,
15
16
  ...InitiativeBusinessRules_1.InitiativePermissions,
17
+ ...DiscussionBusinessRules_1.DiscussionPermissions,
16
18
  ];
17
19
  /**
18
20
  * Validate a Permission
@@ -1 +1 @@
1
- {"version":3,"file":"Permission.js","sourceRoot":"","sources":["../../../../src/permissions/types/Permission.ts"],"names":[],"mappings":";;;AAAA,wFAAmF;AACnF,+EAA0E;AAC1E,iGAA4F;AAE5F;;;;GAIG;AACH,MAAM,gBAAgB,GAAG;IACvB,GAAG,mCAAe;IAClB,GAAG,yCAAkB;IACrB,GAAG,+CAAqB;CAChB,CAAC;AAOX;;;;GAIG;AACH,SAAgB,YAAY,CAAC,eAAuB;IAClD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAA6B,CAAC,CAAC;AAClE,CAAC;AAFD,oCAEC"}
1
+ {"version":3,"file":"Permission.js","sourceRoot":"","sources":["../../../../src/permissions/types/Permission.ts"],"names":[],"mappings":";;;AAAA,wFAAmF;AACnF,+EAA0E;AAC1E,iGAA4F;AAC5F,iGAA4F;AAE5F;;;;GAIG;AACH,MAAM,gBAAgB,GAAG;IACvB,GAAG,mCAAe;IAClB,GAAG,yCAAkB;IACrB,GAAG,+CAAqB;IACxB,GAAG,+CAAqB;CAChB,CAAC;AAOX;;;;GAIG;AACH,SAAgB,YAAY,CAAC,eAAuB;IAClD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAA6B,CAAC,CAAC;AAClE,CAAC;AAFD,oCAEC"}
@@ -9,16 +9,37 @@ const getVersionData_1 = require("./_internal/getVersionData");
9
9
  const constants_1 = require("./_internal/constants");
10
10
  const getIncludeListFromItemType_1 = require("./_internal/getIncludeListFromItemType");
11
11
  const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
12
+ const utils_1 = require("./utils");
13
+ /**
14
+ * Custom error to be thrown when attempting to save a stale version
15
+ * @class StaleVersionError
16
+ * @extends {Error}
17
+ */
18
+ class StaleVersionError extends Error {
19
+ constructor(id, updated) {
20
+ super(`Version ${id} is stale. Use force to overwrite.`);
21
+ this.updated = updated;
22
+ this.name = "StaleVersionError";
23
+ }
24
+ }
12
25
  /**
13
26
  * Updates the specified version with with the state of the supplied model
27
+ * throws an exception if the version is stale and force is not true
14
28
  * @param model
15
29
  * @param version
16
30
  * @param requestOptions
31
+ * @param force
17
32
  * @returns
18
33
  */
19
- async function updateVersion(model, version, requestOptions) {
34
+ async function updateVersion(model, version, requestOptions, force) {
20
35
  // we expect the model to contain the changes that we want to apply to the version
21
36
  // but we also need the versionResource so we can preserve the created and creator props
37
+ if (!force) {
38
+ const isStaleResponse = await utils_1.checkForStaleVersion(model.item.id, version, requestOptions);
39
+ if (isStaleResponse.isStale) {
40
+ throw new StaleVersionError(version.id, isStaleResponse.updated);
41
+ }
42
+ }
22
43
  const includeList = getIncludeListFromItemType_1.getIncludeListFromItemType(model);
23
44
  version.data = getVersionData_1.getVersionData(model, includeList);
24
45
  const prefix = getPrefix_1.getPrefix(version.id);
@@ -1 +1 @@
1
- {"version":3,"file":"updateVersion.js","sourceRoot":"","sources":["../../../src/versioning/updateVersion.ts"],"names":[],"mappings":";;;AACA,kDAA8C;AAC9C,4DAAwD;AACxD,0EAAoE;AAGpE,qDAAkD;AAClD,+DAA4D;AAC5D,qDAG+B;AAC/B,uFAAoF;AACpF,iEAA8D;AAE9D;;;;;;GAMG;AACI,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,OAAiB,EACjB,cAAsC;IAEtC,kFAAkF;IAClF,wFAAwF;IAExF,MAAM,WAAW,GAAG,uDAA0B,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,GAAG,+BAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,qBAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,sCAAgB,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,4BAAY,CAAC,OAAO,EAAE,EAAE,EAAE,uCAA2B,CAAC,CAAC;IAE1E,MAAM,uCAAkB,iCACnB,cAAc,KACjB,EAAE,EAAE,kBAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EAC7B,IAAI,EAAE,iCAAqB,EAC3B,KAAK,EAAE,kBAAO,CAAC,KAAK,EAAE,YAAY,CAAC,EACnC,MAAM,EAAE,EAAE,UAAU,EAAE,EACtB,MAAM,EACN,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,WAAW,IACrB,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AA7BD,sCA6BC"}
1
+ {"version":3,"file":"updateVersion.js","sourceRoot":"","sources":["../../../src/versioning/updateVersion.ts"],"names":[],"mappings":";;;AACA,kDAA8C;AAC9C,4DAAwD;AACxD,0EAAoE;AAGpE,qDAAkD;AAClD,+DAA4D;AAC5D,qDAG+B;AAC/B,uFAAoF;AACpF,iEAA8D;AAC9D,mCAA+C;AAE/C;;;;GAIG;AACH,MAAM,iBAAkB,SAAQ,KAAK;IACnC,YAAY,EAAU,EAAS,OAAe;QAC5C,KAAK,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;QAD5B,YAAO,GAAP,OAAO,CAAQ;QAE5C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,OAAiB,EACjB,cAAsC,EACtC,KAAe;IAEf,kFAAkF;IAClF,wFAAwF;IAExF,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,eAAe,GAAG,MAAM,4BAAoB,CAChD,KAAK,CAAC,IAAI,CAAC,EAAE,EACb,OAAO,EACP,cAAc,CACf,CAAC;QACF,IAAI,eAAe,CAAC,OAAO,EAAE;YAC3B,MAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;SAClE;KACF;IAED,MAAM,WAAW,GAAG,uDAA0B,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,GAAG,+BAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,qBAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,sCAAgB,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,4BAAY,CAAC,OAAO,EAAE,EAAE,EAAE,uCAA2B,CAAC,CAAC;IAE1E,MAAM,uCAAkB,iCACnB,cAAc,KACjB,EAAE,EAAE,kBAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EAC7B,IAAI,EAAE,iCAAqB,EAC3B,KAAK,EAAE,kBAAO,CAAC,KAAK,EAAE,YAAY,CAAC,EACnC,MAAM,EAAE,EAAE,UAAU,EAAE,EACtB,MAAM,EACN,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,WAAW,IACrB,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAzCD,sCAyCC"}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyVersion = void 0;
3
+ exports.checkForStaleVersion = exports.applyVersion = void 0;
4
4
  const util_1 = require("../util");
5
5
  const merge_objects_1 = require("../objects/merge-objects");
6
+ const getVersion_1 = require("./getVersion");
6
7
  const getIncludeListFromItemType_1 = require("./_internal/getIncludeListFromItemType");
7
8
  /**
8
9
  * Applies the versioned data to the model
@@ -18,4 +19,20 @@ function applyVersion(model, version, includeList) {
18
19
  return merge_objects_1.mergeObjects(version.data, util_1.cloneObject(model), includeList);
19
20
  }
20
21
  exports.applyVersion = applyVersion;
22
+ /**
23
+ * Checks if the upstream version is newer than the passed in version
24
+ * @param itemId
25
+ * @param version
26
+ * @param requestOptions
27
+ * @returns
28
+ */
29
+ async function checkForStaleVersion(itemId, version, requestOptions) {
30
+ const upstream = await getVersion_1.getVersion(itemId, version.id, requestOptions);
31
+ const isStale = upstream.updated > version.updated;
32
+ return {
33
+ isStale,
34
+ updated: upstream.updated,
35
+ };
36
+ }
37
+ exports.checkForStaleVersion = checkForStaleVersion;
21
38
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/versioning/utils.ts"],"names":[],"mappings":";;;AAAA,kCAAsC;AACtC,4DAAwD;AAGxD,uFAAoF;AAEpF;;;;;;GAMG;AACH,SAAgB,YAAY,CAC1B,KAAa,EACb,OAAiB,EACjB,WAAsB;IAEtB,IAAI,CAAC,WAAW,EAAE;QAChB,WAAW,GAAG,uDAA0B,CAAC,KAAK,CAAC,CAAC;KACjD;IACD,OAAO,4BAAY,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC;AATD,oCASC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/versioning/utils.ts"],"names":[],"mappings":";;;AAAA,kCAAsC;AACtC,4DAAwD;AAGxD,6CAA0C;AAC1C,uFAAoF;AAEpF;;;;;;GAMG;AACH,SAAgB,YAAY,CAC1B,KAAa,EACb,OAAiB,EACjB,WAAsB;IAEtB,IAAI,CAAC,WAAW,EAAE;QAChB,WAAW,GAAG,uDAA0B,CAAC,KAAK,CAAC,CAAC;KACjD;IACD,OAAO,4BAAY,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC;AATD,oCASC;AAOD;;;;;;GAMG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,OAAiB,EACjB,cAAsC;IAEtC,MAAM,QAAQ,GAAG,MAAM,uBAAU,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnD,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC;AAXD,oDAWC"}
@@ -76,6 +76,7 @@ export declare const setContentBoundary: (content: IHubContent, boundary: Geogra
76
76
  url?: string;
77
77
  id: string;
78
78
  itemControl: string;
79
+ orgId?: string;
79
80
  access?: import("../core").AccessLevel;
80
81
  culture?: string;
81
82
  description?: string;
@@ -76,6 +76,11 @@ export declare abstract class HubItemEntity<T extends IHubItemEntity> implements
76
76
  * @returns
77
77
  */
78
78
  get canDelete(): boolean;
79
+ /**
80
+ * The orgId of the Entity, if available
81
+ * @returns the entity orgId, when available
82
+ */
83
+ get orgId(): string;
79
84
  /**
80
85
  * Share the Entity with the specified group id
81
86
  * @param groupId
@@ -1 +1 @@
1
- export declare type HubEntityType = "site" | "project" | "initiative" | "page";
1
+ export declare type HubEntityType = "site" | "project" | "initiative" | "page" | "discussion";
@@ -0,0 +1,8 @@
1
+ import { IWithPermissions, IWithSlug } from "../traits";
2
+ import { IHubItemEntity } from "./IHubItemEntity";
3
+ /**
4
+ * DRAFT: Under development and more properties will likely be added
5
+ * @internal
6
+ */
7
+ export interface IHubDiscussion extends IHubItemEntity, IWithSlug, IWithPermissions {
8
+ }
@@ -81,4 +81,8 @@ export interface IHubItemEntity extends IHubEntityBase, IWithPermissions {
81
81
  */
82
82
  canDelete: boolean;
83
83
  location?: IHubLocation;
84
+ /**
85
+ * The orgId of the Entity, if available
86
+ */
87
+ orgId?: string;
84
88
  }
@@ -2,6 +2,7 @@ export * from "./HubEntity";
2
2
  export * from "./HubEntityType";
3
3
  export * from "./IHubContent";
4
4
  export * from "./IHubContentEnrichments";
5
+ export * from "./IHubDiscussion";
5
6
  export * from "./IHubEntityBase";
6
7
  export * from "./IHubEvent";
7
8
  export * from "./IHubImage";
@@ -0,0 +1,44 @@
1
+ import { IWithSharingBehavior, IWithStoreBehavior } from "../core/behaviors";
2
+ import { IArcGISContext } from "../ArcGISContext";
3
+ import { IHubDiscussion } from "../core/types";
4
+ import { HubItemEntity } from "../core/HubItemEntity";
5
+ /**
6
+ * Hub Discussion Class
7
+ */
8
+ export declare class HubDiscussion extends HubItemEntity<IHubDiscussion> implements IWithStoreBehavior<IHubDiscussion>, IWithSharingBehavior {
9
+ /**
10
+ * Create an instance from an IHubDiscussion object
11
+ * @param json JSON object to create a HubDiscussion from
12
+ * @param context ArcGIS context
13
+ * @returns a HubDiscussion
14
+ */
15
+ static fromJson(json: Partial<IHubDiscussion>, context: IArcGISContext): HubDiscussion;
16
+ /**
17
+ * Create a new HubDiscussion, returning a HubDiscussion instance.
18
+ * Note: This does not persist the Discussion into the backing store
19
+ * @param partialDiscussion a partial IHubDiscussion
20
+ * @param context ArcGIS context
21
+ * @returns promise that resolves a HubDiscussion
22
+ */
23
+ static create(partialDiscussion: Partial<IHubDiscussion>, context: IArcGISContext, save?: boolean): Promise<HubDiscussion>;
24
+ /**
25
+ * Fetch a Discussion from the backing store and return a HubDiscussion instance.
26
+ * @param identifier slug or item id
27
+ * @param context ArcGIS context
28
+ * @returns promise that resolves a HubDiscussion
29
+ */
30
+ static fetch(identifier: string, context: IArcGISContext): Promise<HubDiscussion>;
31
+ private static applyDefaults;
32
+ /**
33
+ * Apply a new state to the instance
34
+ * @param changes A partial IHubDiscussion
35
+ */
36
+ update(changes: Partial<IHubDiscussion>): void;
37
+ save(): Promise<void>;
38
+ /**
39
+ * Delete the HubDiscussion from the store
40
+ * set a flag to indicate that it is destroyed
41
+ * @returns a promise
42
+ */
43
+ delete(): Promise<void>;
44
+ }
@@ -0,0 +1,27 @@
1
+ import { EntityCapabilities, ICapabilityPermission } from "../../capabilities";
2
+ import { IPermissionPolicy } from "../../permissions";
3
+ /**
4
+ * Default capabilities for a Discussion. If not listed here, the capability will not be available
5
+ * This hash is combined with the capabilities hash stored in the item data. Regardless of what
6
+ * properties are defined in the item data, only the capabilities defined here will be available
7
+ * @private
8
+ */
9
+ export declare const DiscussionDefaultCapabilities: EntityCapabilities;
10
+ /**
11
+ * List of all the Discussion Capability Permissions
12
+ * These are considered Hub Business Rules and are not intended
13
+ * to be modified by consumers
14
+ * @private
15
+ */
16
+ export declare const DiscussionCapabilityPermissions: ICapabilityPermission[];
17
+ /**
18
+ * Discussion Permission Policies
19
+ * These define the requirements any user must meet to perform related actions
20
+ * @private
21
+ */
22
+ export declare const DiscussionPermissions: readonly ["hub:discussion:create", "hub:discussion:delete", "hub:discussion:edit", "hub:discussion:view"];
23
+ /**
24
+ * Discussion permission policies
25
+ * @private
26
+ */
27
+ export declare const DiscussionPermissionPolicies: IPermissionPolicy[];
@@ -0,0 +1,12 @@
1
+ import { IRequestOptions } from "@esri/arcgis-rest-request";
2
+ import { IModel } from "../../types";
3
+ import { IHubDiscussion } from "../../core";
4
+ /**
5
+ * Given a model and a Discussion, set various computed properties that can't be directly mapped
6
+ * @private
7
+ * @param model
8
+ * @param discussion
9
+ * @param requestOptions
10
+ * @returns an IHubDiscussion
11
+ */
12
+ export declare function computeProps(model: IModel, discussion: Partial<IHubDiscussion>, requestOptions: IRequestOptions): IHubDiscussion;
@@ -0,0 +1,8 @@
1
+ import { IPropertyMap } from "../../core/_internal/PropertyMapper";
2
+ /**
3
+ * Returns an Array of IPropertyMap objects
4
+ * that define the projection of properties from a IModel to an IHubDiscussion
5
+ * @returns an IPropertyMap array
6
+ * @private
7
+ */
8
+ export declare function getPropertyMap(): IPropertyMap[];
@@ -0,0 +1,11 @@
1
+ import { IHubDiscussion } from "../core/types";
2
+ import { IModel } from "../types";
3
+ export declare const HUB_DISCUSSION_ITEM_TYPE = "Discussion";
4
+ /**
5
+ * Default values of a IHubDiscussion
6
+ */
7
+ export declare const DEFAULT_DISCUSSION: Partial<IHubDiscussion>;
8
+ /**
9
+ * Default values for a new HubDiscussion Model
10
+ */
11
+ export declare const DEFAULT_DISCUSSION_MODEL: IModel;
@@ -0,0 +1,29 @@
1
+ import { IUserRequestOptions } from "@esri/arcgis-rest-auth";
2
+ import { IHubDiscussion } from "../core/types";
3
+ /**
4
+ * @private
5
+ * Create a new Hub Discussion item
6
+ *
7
+ * Minimal properties are name and orgUrlKey
8
+ *
9
+ * @param partialDiscussion a partial discussion
10
+ * @param requestOptions user request options
11
+ * @returns promise that resolves a IHubDiscussion
12
+ */
13
+ export declare function createDiscussion(partialDiscussion: Partial<IHubDiscussion>, requestOptions: IUserRequestOptions): Promise<IHubDiscussion>;
14
+ /**
15
+ * @private
16
+ * Update a Hub Discussion
17
+ * @param discussion the discussion to update
18
+ * @param requestOptions user request options
19
+ * @returns promise that resolves a IHubDiscussion
20
+ */
21
+ export declare function updateDiscussion(discussion: IHubDiscussion, requestOptions: IUserRequestOptions): Promise<IHubDiscussion>;
22
+ /**
23
+ * @private
24
+ * Remove a Hub Discussion
25
+ * @param id the discussion item id
26
+ * @param requestOptions request options
27
+ * @returns a promise
28
+ */
29
+ export declare function deleteDiscussion(id: string, requestOptions: IUserRequestOptions): Promise<void>;
@@ -0,0 +1,20 @@
1
+ import { IRequestOptions } from "@esri/arcgis-rest-request";
2
+ import { IItem } from "@esri/arcgis-rest-portal";
3
+ import { IHubDiscussion } from "../core/types";
4
+ /**
5
+ * @private
6
+ * Get a Discussion by id or slug
7
+ * @param identifier item id or slug
8
+ * @param requestOptions request options
9
+ * @returns a promise that resolves a IHubDiscussion
10
+ */
11
+ export declare function fetchDiscussion(identifier: string, requestOptions: IRequestOptions): Promise<IHubDiscussion>;
12
+ /**
13
+ * @private
14
+ * Convert a Hub Discussion Item into a Hub Discussion, fetching any additional
15
+ * information that may be required
16
+ * @param item the discussion item
17
+ * @param auth request options
18
+ * @returns a promise that resolves a IHubDiscussion
19
+ */
20
+ export declare function convertItemToDiscussion(item: IItem, requestOptions: IRequestOptions): Promise<IHubDiscussion>;
@@ -0,0 +1,3 @@
1
+ export * from "./HubDiscussion";
2
+ export * from "./edit";
3
+ export * from "./fetch";
@@ -12,6 +12,7 @@ export * from "./extent";
12
12
  export * from "./groups";
13
13
  export * from "./i18n";
14
14
  export * from "./initiatives";
15
+ export * from "./discussions";
15
16
  export * from "./items";
16
17
  export * from "./models";
17
18
  export * from "./objects";
@@ -3,11 +3,11 @@
3
3
  * It's critical that the arrays defined in the modules use `as const`
4
4
  * otherwise Permission devolves into just a string type
5
5
  */
6
- declare const validPermissions: readonly ["hub:site:create", "hub:site:delete", "hub:site:edit", "hub:site:view", "hub:project:create", "hub:project:delete", "hub:project:edit", "hub:project:view", "hub:initiative:create", "hub:initiative:delete", "hub:initiative:edit", "hub:initiative:view"];
6
+ declare const validPermissions: readonly ["hub:site:create", "hub:site:delete", "hub:site:edit", "hub:site:view", "hub:project:create", "hub:project:delete", "hub:project:edit", "hub:project:view", "hub:initiative:create", "hub:initiative:delete", "hub:initiative:edit", "hub:initiative:view", "hub:discussion:create", "hub:discussion:delete", "hub:discussion:edit", "hub:discussion:view"];
7
7
  /**
8
8
  * Defines the possible values for Permissions
9
9
  */
10
- export declare type Permission = typeof validPermissions[number];
10
+ export declare type Permission = (typeof validPermissions)[number];
11
11
  /**
12
12
  * Validate a Permission
13
13
  * @param permission
@@ -3,9 +3,11 @@ import { IModel } from "../types";
3
3
  import { IVersion } from "./types";
4
4
  /**
5
5
  * Updates the specified version with with the state of the supplied model
6
+ * throws an exception if the version is stale and force is not true
6
7
  * @param model
7
8
  * @param version
8
9
  * @param requestOptions
10
+ * @param force
9
11
  * @returns
10
12
  */
11
- export declare function updateVersion(model: IModel, version: IVersion, requestOptions: IHubUserRequestOptions): Promise<IVersion>;
13
+ export declare function updateVersion(model: IModel, version: IVersion, requestOptions: IHubUserRequestOptions, force?: boolean): Promise<IVersion>;
@@ -1,4 +1,4 @@
1
- import { IModel } from "../types";
1
+ import { IHubUserRequestOptions, IModel } from "../types";
2
2
  import { IVersion } from "./types/IVersion";
3
3
  /**
4
4
  * Applies the versioned data to the model
@@ -8,3 +8,16 @@ import { IVersion } from "./types/IVersion";
8
8
  * @returns
9
9
  */
10
10
  export declare function applyVersion(model: IModel, version: IVersion, includeList?: string[]): IModel;
11
+ interface IStaleVersionResponse {
12
+ isStale: boolean;
13
+ updated: number;
14
+ }
15
+ /**
16
+ * Checks if the upstream version is newer than the passed in version
17
+ * @param itemId
18
+ * @param version
19
+ * @param requestOptions
20
+ * @returns
21
+ */
22
+ export declare function checkForStaleVersion(itemId: string, version: IVersion, requestOptions: IHubUserRequestOptions): Promise<IStaleVersionResponse>;
23
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esri/hub-common",
3
- "version": "12.11.0",
3
+ "version": "12.13.0",
4
4
  "description": "Common TypeScript types and utility functions for @esri/hub.js.",
5
5
  "main": "dist/node/index.js",
6
6
  "module": "dist/esm/index.js",