jitz-sharepoint-utilities 1.11.3 → 2.0.1

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 (94) hide show
  1. package/@types/allTypes.d.ts +1 -0
  2. package/controls/JitzGrid.tsx +639 -0
  3. package/controls/JitzImage.tsx +38 -0
  4. package/controls/JitzPeoplePicker.tsx +419 -0
  5. package/controls/JitzPersonInfo.tsx +114 -0
  6. package/controls/JitzPersona.tsx +53 -0
  7. package/data/context/CommonRepository.ts +287 -0
  8. package/data/context/JitzContext.ts +33 -0
  9. package/data/context/JitzSPContext.ts +16 -0
  10. package/data/context/JitzSPHttpClient.ts +133 -0
  11. package/data/context/List.ts +429 -0
  12. package/data/context/Repository.ts +395 -0
  13. package/data/interfaces/ICommonRepository.ts +7 -0
  14. package/data/interfaces/IJitzContext.ts +11 -0
  15. package/data/interfaces/IJitzSPContext.ts +7 -0
  16. package/data/interfaces/IJitzSPHttpClient.ts +6 -0
  17. package/data/interfaces/IList.ts +41 -0
  18. package/data/interfaces/IModels.ts +33 -0
  19. package/data/interfaces/IRepository.ts +31 -0
  20. package/lib/common/IModels.d.ts +9 -1
  21. package/lib/common/IObjects.d.ts +72 -0
  22. package/lib/common/IObjects.js +30 -0
  23. package/lib/controls/JitzGrid.d.ts +75 -0
  24. package/lib/controls/JitzGrid.js +606 -0
  25. package/lib/controls/JitzImage.d.ts +14 -0
  26. package/lib/controls/JitzImage.js +37 -0
  27. package/lib/controls/JitzPeoplePicker.d.ts +49 -0
  28. package/lib/controls/JitzPeoplePicker.js +311 -0
  29. package/lib/controls/JitzPersonInfo.d.ts +32 -0
  30. package/lib/controls/JitzPersonInfo.js +98 -0
  31. package/lib/controls/JitzPersona.d.ts +23 -0
  32. package/lib/controls/JitzPersona.js +48 -0
  33. package/lib/data/Activities.d.ts +6 -0
  34. package/lib/data/Activities.js +36 -0
  35. package/lib/data/Attachments.d.ts +6 -0
  36. package/lib/data/Attachments.js +30 -0
  37. package/lib/data/Configurations.d.ts +6 -0
  38. package/lib/data/Configurations.js +30 -0
  39. package/lib/data/CustomStylesheet.d.ts +6 -0
  40. package/lib/data/CustomStylesheet.js +30 -0
  41. package/lib/data/EmailTemplates.d.ts +6 -0
  42. package/lib/data/EmailTemplates.js +31 -0
  43. package/lib/data/FAQs.d.ts +6 -0
  44. package/lib/data/FAQs.js +30 -0
  45. package/lib/data/HomePageTexts.d.ts +6 -0
  46. package/lib/data/HomePageTexts.js +30 -0
  47. package/lib/data/TicketCategories.d.ts +6 -0
  48. package/lib/data/TicketCategories.js +26 -0
  49. package/lib/data/TicketComments.d.ts +6 -0
  50. package/lib/data/TicketComments.js +32 -0
  51. package/lib/data/TicketPriorities.d.ts +6 -0
  52. package/lib/data/TicketPriorities.js +31 -0
  53. package/lib/data/TicketStatuses.d.ts +6 -0
  54. package/lib/data/TicketStatuses.js +31 -0
  55. package/lib/data/TicketSubcategories.d.ts +6 -0
  56. package/lib/data/TicketSubcategories.js +26 -0
  57. package/lib/data/Tickets.d.ts +6 -0
  58. package/lib/data/Tickets.js +45 -0
  59. package/lib/data/context/CommonRepository.d.ts +17 -0
  60. package/lib/data/context/CommonRepository.js +288 -0
  61. package/lib/data/context/JitzContext.d.ts +13 -0
  62. package/lib/data/context/JitzContext.js +80 -0
  63. package/lib/data/context/JitzSPContext.d.ts +8 -0
  64. package/lib/data/context/JitzSPContext.js +58 -0
  65. package/lib/data/context/JitzSPHttpClient.d.ts +14 -0
  66. package/lib/data/context/JitzSPHttpClient.js +173 -0
  67. package/lib/data/context/List.d.ts +36 -0
  68. package/lib/data/context/List.js +450 -0
  69. package/lib/data/context/Repository.d.ts +19 -0
  70. package/lib/data/context/Repository.js +421 -0
  71. package/lib/data/interfaces/ICommonRepository.d.ts +6 -0
  72. package/lib/data/interfaces/ICommonRepository.js +2 -0
  73. package/lib/data/interfaces/IJitzContext.d.ts +10 -0
  74. package/lib/data/interfaces/IJitzContext.js +2 -0
  75. package/lib/data/interfaces/IJitzSPContext.d.ts +6 -0
  76. package/lib/data/interfaces/IJitzSPContext.js +2 -0
  77. package/lib/data/interfaces/IJitzSPHttpClient.d.ts +6 -0
  78. package/lib/data/interfaces/IJitzSPHttpClient.js +2 -0
  79. package/lib/data/interfaces/IList.d.ts +25 -0
  80. package/lib/data/interfaces/IList.js +2 -0
  81. package/lib/data/interfaces/IModels.d.ts +32 -0
  82. package/lib/data/interfaces/IModels.js +2 -0
  83. package/lib/data/interfaces/IRepository.d.ts +14 -0
  84. package/lib/data/interfaces/IRepository.js +2 -0
  85. package/lib/jitzSPHttpClient.js +5 -3
  86. package/lib/repositories/CommonRepository.js +17 -16
  87. package/lib/repositories/Repository.js +22 -21
  88. package/lib/services/GraphService.d.ts +10 -0
  89. package/lib/services/GraphService.js +105 -0
  90. package/lib/services/UserService.d.ts +1 -1
  91. package/lib/services/UserService.js +9 -9
  92. package/lib/services/UtilityService.d.ts +18 -12
  93. package/lib/services/UtilityService.js +157 -58
  94. package/package.json +7 -5
@@ -0,0 +1,429 @@
1
+ import IJitzContext from "../interfaces/IJitzContext";
2
+ import { IList } from "../interfaces/IList";
3
+ import { IModel } from "../interfaces/IModels";
4
+ import { IRepository } from "../interfaces/IRepository";
5
+ import Repository from "./Repository";
6
+
7
+ interface BigObject<T> {
8
+ [index: string]: T;
9
+ }
10
+
11
+ export default class List<T extends IModel> implements IList<T> {
12
+ context: IJitzContext;
13
+ listName: string;
14
+ // _listId: string;
15
+ _nextPageLink: string;
16
+ // items: any[];
17
+ top: number = 100;
18
+ indexLimit: number = 5000;
19
+ simpleFields: string[] = [];
20
+ userTypeFields: string[] = [];
21
+ lookUpFields: string[] = [];
22
+ additionalExpandFields: string[] = [];
23
+ repository: IRepository<T>;
24
+
25
+ filters?: string = "";
26
+ upperId: number = 0;
27
+ lowerId: number = 0;
28
+ orderBy?: string | undefined;
29
+
30
+ constructor(
31
+ jitzContext: IJitzContext,
32
+ listName: string,
33
+ simpleFields: string[],
34
+ userTypeFields: string[],
35
+ lookUpFields: string[],
36
+ additionalExpandFields: string[]
37
+ ) {
38
+ this.context = jitzContext;
39
+ this.listName = listName;
40
+ this.simpleFields = simpleFields || [];
41
+ this.userTypeFields = userTypeFields || [];
42
+ this.lookUpFields = lookUpFields || [];
43
+ this.additionalExpandFields = additionalExpandFields || [];
44
+ this.repository = new Repository<T>(this.context.spContext, listName);
45
+ }
46
+
47
+ getItems = async (
48
+ filters?: string,
49
+ orderby?: string,
50
+ top?: number,
51
+ skip?: number
52
+ ): Promise<T[]> => {
53
+ this.top = top || this.top;
54
+ let items: T[] = [];
55
+ var expandFields = (
56
+ [...this.lookUpFields, ...this.userTypeFields] || []
57
+ ).join(",");
58
+ var selectFields = this.getSelectFieldsForSharePointApi();
59
+ this.filters = filters;
60
+ this.orderBy = orderby;
61
+ var response: any = await this.repository.getAll(
62
+ selectFields,
63
+ expandFields,
64
+ filters,
65
+ orderby,
66
+ top || this.top,
67
+ skip
68
+ );
69
+ this._nextPageLink = response.__next || "";
70
+ // console.log(items);
71
+
72
+ // this.items = items;
73
+ return response.results;
74
+ };
75
+
76
+ loadMore = async (): Promise<T[]> => {
77
+ try {
78
+ if (this._nextPageLink != undefined && this._nextPageLink.length > 0) {
79
+ let items: T[] = [];
80
+ var expandFields = (
81
+ [...this.lookUpFields, ...this.userTypeFields] || []
82
+ ).join(",");
83
+ var selectFields = this.getSelectFieldsForSharePointApi();
84
+
85
+ var response: any = await this.repository.getAllFromUrl(
86
+ this._nextPageLink
87
+ );
88
+ this._nextPageLink = response.__next || "";
89
+ // console.log(items);
90
+
91
+ // this.items = items;
92
+ return response.results;
93
+ }
94
+ } catch {}
95
+ return [];
96
+ };
97
+
98
+ getItemsIndexed = async (
99
+ filterQuery?: string,
100
+ orderby?: string,
101
+ top?: number
102
+ ): Promise<T[]> => {
103
+ this.top = top || this.top;
104
+ let filter: string = "(Id ge 1)";
105
+ this.orderBy = orderby;
106
+ this.filters = filterQuery;
107
+ //Find latest Id
108
+ await this.repository
109
+ .getAll("*", "", "", `Id desc`, 1)
110
+ .then((datacount: any) => {
111
+ if (datacount?.results?.length > 0) {
112
+ this.upperId = datacount.results[0].Id;
113
+ }
114
+ });
115
+
116
+ this.lowerId = this.getLowerId(this.upperId);
117
+
118
+ if (this.upperId > 1)
119
+ filter = `(Id gt ${this.lowerId} and Id le ${this.upperId})`;
120
+ filterQuery = `${filter} ${
121
+ filterQuery != undefined && filterQuery.length > 0
122
+ ? `and ${filterQuery}`
123
+ : ""
124
+ }`;
125
+ var results = await this.getData(filterQuery);
126
+ return results;
127
+ };
128
+
129
+ public async loadMoreIndexed(): Promise<T[]> {
130
+ if (this._nextPageLink != undefined && this._nextPageLink.length > 0) {
131
+ var response: any = await this.repository.getAllFromUrl(
132
+ this._nextPageLink
133
+ );
134
+ this._nextPageLink = response.__next || "";
135
+ return response.results;
136
+ } else {
137
+ var filter = "";
138
+ this.upperId = this.lowerId;
139
+ this.lowerId = this.getLowerId(this.upperId);
140
+
141
+ if (this.upperId > 1) {
142
+ filter = `(Id gt ${this.lowerId} and Id le ${this.upperId})`;
143
+ if (this.filters != undefined && this.filters.length > 0)
144
+ filter = `${filter} and ${this.filters}`;
145
+ console.log(filter);
146
+ var results = await this.getData(filter);
147
+ return results;
148
+ } else return [];
149
+ }
150
+ }
151
+
152
+ getData = async (filter: string): Promise<T[]> => {
153
+ var expandFields = (
154
+ [...this.lookUpFields, ...this.userTypeFields] || []
155
+ ).join(",");
156
+ var selectFields = this.getSelectFieldsForSharePointApi();
157
+ var response: any = await this.repository.getAll(
158
+ selectFields,
159
+ expandFields,
160
+ filter,
161
+ this.orderBy || `Id desc`,
162
+ this.top
163
+ );
164
+
165
+ this._nextPageLink = response.__next || "";
166
+ return response.results as T[];
167
+ };
168
+
169
+ private getLowerId = (upperId: number): number => {
170
+ if (upperId > this.indexLimit) return upperId - this.indexLimit;
171
+ else return 0;
172
+ };
173
+
174
+ getItemById = async (id: number): Promise<T> => {
175
+ var item: any;
176
+ var expandFields = (
177
+ [...this.lookUpFields, ...this.userTypeFields] || []
178
+ ).join(",");
179
+ var selectFields = this.getSelectFieldsForSharePointApi();
180
+ item = await this.repository.getItemById(id, selectFields, expandFields);
181
+ return item;
182
+ };
183
+
184
+ getItemsRecursive = async (
185
+ filters?: string,
186
+ orderby?: string,
187
+ top: number = 5000,
188
+ maxRecursiveCount: number = 5
189
+ ): Promise<T[]> => {
190
+ let items: T[] = [];
191
+ var expandFields = (
192
+ [...this.lookUpFields, ...this.userTypeFields] || []
193
+ ).join(",");
194
+ var selectFields = this.getSelectFieldsForSharePointApi();
195
+ items = await this.repository.getAllRecursive(
196
+ selectFields,
197
+ expandFields,
198
+ filters,
199
+ orderby,
200
+ top || this.top,
201
+ maxRecursiveCount
202
+ );
203
+ // console.log(items);
204
+
205
+ // this.items = items;
206
+ return items;
207
+ };
208
+
209
+ getItemsCount = async (filters?: string): Promise<number> => {
210
+ var count = await this.repository.itemsCount(filters);
211
+ return count;
212
+ };
213
+
214
+ create = async (item: T): Promise<T> => {
215
+ var newItem = this.setPropertiesForSharePointApi(item);
216
+ item = await this.repository.createItem(newItem);
217
+ // await this.context.graphClient
218
+ // .api(`/sites/${this.context.siteId}/lists/${this.listName}/items`)
219
+ // .post({ fields: item })
220
+ // .then((response: any) => {
221
+ // item = response;
222
+ // })
223
+ // .catch((err) => {
224
+ // console.log(err);
225
+ // });
226
+
227
+ return item;
228
+ };
229
+
230
+ update = async (item: T): Promise<T> => {
231
+ var newItem = this.setPropertiesForSharePointApi(item);
232
+ item = await this.repository.updateItem(newItem);
233
+ // let newObject: any = {};
234
+ // var itemAsAny = item as any;
235
+ // Object.keys(itemAsAny).forEach((key) => {
236
+ // if ((key || "").toString().toLowerCase() != "id")
237
+ // newObject[key] = itemAsAny[key];
238
+ // });
239
+ // await this.context.graphClient
240
+ // .api(
241
+ // `/sites/${this.context.siteId}/lists/${this.listName}/items/${item.Id}/fields`
242
+ // )
243
+ // .update(newObject)
244
+ // .then((response: any) => {
245
+ // item = response;
246
+ // })
247
+ // .catch((err) => {
248
+ // console.log(err);
249
+ // });
250
+
251
+ return item;
252
+ };
253
+
254
+ delete = async (id: number): Promise<boolean> => {
255
+ var result = await this.repository.deleteItem(id);
256
+ // await this.context.graphClient
257
+ // .api(`/sites/${this.context.siteId}/lists/${this.listName}/items/${id}`)
258
+ // .delete()
259
+ // .then((response: any) => {
260
+ // result = true;
261
+ // })
262
+ // .catch((err) => {
263
+ // console.log(err);
264
+ // });
265
+
266
+ return result;
267
+ };
268
+
269
+ // getItems = async (
270
+ // filter?: string[],
271
+ // orderby?: string,
272
+ // top?: number
273
+ // ): Promise<T[]> => {
274
+ // let items: T[] = [];
275
+ // var expandFields = (
276
+ // [...this.lookUpFields, ...this.userTypeFields] || []
277
+ // ).join(",");
278
+ // try {
279
+ // var selectFields = this.getSelectFieldsForGraphApi();
280
+ // await this.context.graphClient
281
+ // .api(
282
+ // `/sites/${this.context.siteId}/lists/${
283
+ // this.listName
284
+ // }/items?expand=fields(select=${selectFields})&top=${top || this.top}`
285
+ // )
286
+ // .get((err, res) => {
287
+ // if (err) {
288
+ // console.log(err);
289
+ // return items;
290
+ // }
291
+ // if (
292
+ // res != undefined &&
293
+ // res["@odata.context"] != undefined &&
294
+ // res.value != undefined &&
295
+ // res.value.length > 0
296
+ // ) {
297
+ // console.log(res.value);
298
+ // for (var i = 0; i < res.value.length; i++) {
299
+ // var item = {
300
+ // Id: res.value[i].id,
301
+ // Title: res.value[i].fields["Title"],
302
+ // };
303
+ // items.push(item as T);
304
+ // }
305
+ // console.log(items);
306
+ // }
307
+ // });
308
+ // } catch {
309
+ // var selectFields = this.getSelectFieldsForSharePointApi();
310
+ // items = await this.repository.getAll(selectFields, expandFields);
311
+ // console.log(items);
312
+ // }
313
+ // this.items = items;
314
+ // return items;
315
+ // };
316
+
317
+ // getItemById = async (id: number): Promise<T> => {
318
+ // var item: any;
319
+ // try {
320
+ // await this.context.graphClient
321
+ // .api(`/sites/${this.context.siteId}/lists/${this.listName}/items/${id}`)
322
+ // .get()
323
+ // .then((response: any) => {
324
+ // // console.log(response);
325
+ // item = response.fields;
326
+ // })
327
+ // .catch((err) => {
328
+ // console.log(err);
329
+ // });
330
+ // } catch {
331
+ // item = await this.repository.getItemById(id);
332
+ // }
333
+ // return item;
334
+ // };
335
+
336
+ private setPropertiesForSharePointApi = (item: any): any => {
337
+ var newItem: any = {};
338
+ Object.keys(item).forEach((e) => {
339
+ // console.log(`key=${e} value=${item[e]}`);
340
+ var keyText = (e || "").split("Lookup").join("");
341
+ newItem[keyText] = item[e];
342
+ });
343
+ return newItem;
344
+ };
345
+
346
+ private getSelectFieldsForSharePointApi = (): string => {
347
+ var selectFields = "";
348
+ var userTypeFields: string[] = [];
349
+ var lookUpFields: string[] = [];
350
+ var additionalExpandFields: string[] = [];
351
+ if (this.userTypeFields.length > 0) {
352
+ for (var i = 0; i < this.userTypeFields.length; i++) {
353
+ userTypeFields.push(`${this.userTypeFields[i]}Id`);
354
+ userTypeFields.push(`${this.userTypeFields[i]}/Id`);
355
+ userTypeFields.push(`${this.userTypeFields[i]}/Name`);
356
+ userTypeFields.push(`${this.userTypeFields[i]}/Title`);
357
+ userTypeFields.push(`${this.userTypeFields[i]}/EMail`);
358
+ }
359
+ }
360
+ if (this.lookUpFields.length > 0) {
361
+ for (var i = 0; i < this.lookUpFields.length; i++) {
362
+ lookUpFields.push(`${this.lookUpFields[i]}`);
363
+ lookUpFields.push(`${this.lookUpFields[i]}Id`);
364
+ lookUpFields.push(`${this.lookUpFields[i]}/Id`);
365
+ lookUpFields.push(`${this.lookUpFields[i]}/Title`);
366
+ }
367
+ }
368
+ if (this.additionalExpandFields.length > 0) {
369
+ for (var i = 0; i < this.additionalExpandFields.length; i++) {
370
+ additionalExpandFields.push(this.additionalExpandFields[i]);
371
+ }
372
+ }
373
+ selectFields = (
374
+ [
375
+ ...this.simpleFields,
376
+ ...userTypeFields,
377
+ ...lookUpFields,
378
+ ...additionalExpandFields,
379
+ ] || []
380
+ ).join(",");
381
+ return selectFields;
382
+ };
383
+
384
+ private getSelectFieldsForGraphApi = (): string => {
385
+ var selectFields = "";
386
+ var userTypeFields: string[] = [];
387
+ var lookUpFields: string[] = [];
388
+ if (this.userTypeFields.length > 0) {
389
+ for (var i = 0; i < this.userTypeFields.length; i++) {
390
+ userTypeFields.push(`${this.userTypeFields[0]}LookupId`);
391
+ userTypeFields.push(`${this.userTypeFields[0]}`);
392
+ userTypeFields.push(`${this.userTypeFields[0]}EMail`);
393
+ }
394
+ }
395
+ if (this.lookUpFields.length > 0) {
396
+ for (var i = 0; i < this.lookUpFields.length; i++) {
397
+ lookUpFields.push(`${this.lookUpFields[0]}`);
398
+ lookUpFields.push(`${this.lookUpFields[0]}LookupId`);
399
+ }
400
+ }
401
+ selectFields = (
402
+ [...this.simpleFields, ...userTypeFields, ...lookUpFields] || []
403
+ ).join(",");
404
+ return selectFields;
405
+ };
406
+
407
+ // private checkGraphApiPermission = async () => {
408
+ // try {
409
+ // this.context.graphClient
410
+ // .api(
411
+ // `/sites/${this.context.siteId}/lists/${this.listName}/items?expand=fields&top=1`
412
+ // )
413
+ // .get((err, res) => {
414
+ // if (err) {
415
+ // console.log(err);
416
+ // this.hasGraphApiPermission = false;
417
+ // return err;
418
+ // }
419
+ // if (res != undefined && res["@odata.context"] != undefined) {
420
+ // console.log(res);
421
+ // this.hasGraphApiPermission = true;
422
+ // }
423
+ // return res;
424
+ // });
425
+ // } catch {
426
+ // this.hasGraphApiPermission = false;
427
+ // }
428
+ // };
429
+ }