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