@memberjunction/ng-explorer-core 2.48.0 → 2.49.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.
- package/dist/app-routing.module.js +40 -53
- package/dist/app-routing.module.js.map +1 -1
- package/dist/generic/Events.types.js +104 -0
- package/dist/generic/Events.types.js.map +1 -1
- package/dist/generic/Item.types.js +28 -14
- package/dist/generic/Item.types.js.map +1 -1
- package/dist/generic/PathData.types.js +5 -0
- package/dist/generic/PathData.types.js.map +1 -1
- package/dist/generic/app-nav-view.types.js +3 -1
- package/dist/generic/app-nav-view.types.js.map +1 -1
- package/dist/lib/app-view/application-view.component.js +273 -294
- package/dist/lib/app-view/application-view.component.js.map +1 -1
- package/dist/lib/auth-button/auth-button.component.js +13 -22
- package/dist/lib/auth-button/auth-button.component.js.map +1 -1
- package/dist/lib/base-browser-component/base-browser-component.js +96 -108
- package/dist/lib/base-browser-component/base-browser-component.js.map +1 -1
- package/dist/lib/dashboard-browser-component/dashboard-browser.component.js +106 -124
- package/dist/lib/dashboard-browser-component/dashboard-browser.component.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +257 -281
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/data-browser-component/data-browser.component.js +122 -137
- package/dist/lib/data-browser-component/data-browser.component.js.map +1 -1
- package/dist/lib/expansion-panel-component/expansion-panel-component.js +100 -117
- package/dist/lib/expansion-panel-component/expansion-panel-component.js.map +1 -1
- package/dist/lib/favorites/favorites.component.js +44 -54
- package/dist/lib/favorites/favorites.component.js.map +1 -1
- package/dist/lib/files/files.component.js +12 -11
- package/dist/lib/files/files.component.js.map +1 -1
- package/dist/lib/generic/form-toolbar.js +21 -20
- package/dist/lib/generic/form-toolbar.js.map +1 -1
- package/dist/lib/generic/resource-container-component.js +23 -20
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/generic-browse-list/generic-browse-list.component.js +48 -46
- package/dist/lib/generic-browse-list/generic-browse-list.component.js.map +1 -1
- package/dist/lib/generic-browser-list/generic-browser-list.component.js +353 -386
- package/dist/lib/generic-browser-list/generic-browser-list.component.js.map +1 -1
- package/dist/lib/guards/auth-guard.service.js +4 -2
- package/dist/lib/guards/auth-guard.service.js.map +1 -1
- package/dist/lib/guards/entities.guard.js +1 -1
- package/dist/lib/guards/entities.guard.js.map +1 -1
- package/dist/lib/header/MSFT_UserImageService.js +4 -3
- package/dist/lib/header/MSFT_UserImageService.js.map +1 -1
- package/dist/lib/header/header.component.js +111 -121
- package/dist/lib/header/header.component.js.map +1 -1
- package/dist/lib/home-component/home.component.js +34 -42
- package/dist/lib/home-component/home.component.js.map +1 -1
- package/dist/lib/home-wrapper/home-wrapper.component.js +6 -6
- package/dist/lib/home-wrapper/home-wrapper.component.js.map +1 -1
- package/dist/lib/list-view/list-view.component.js +132 -152
- package/dist/lib/list-view/list-view.component.js.map +1 -1
- package/dist/lib/navigation/navigation.component.js +568 -615
- package/dist/lib/navigation/navigation.component.js.map +1 -1
- package/dist/lib/query-browser-component/query-browser.component.js +30 -39
- package/dist/lib/query-browser-component/query-browser.component.js.map +1 -1
- package/dist/lib/report-browser-component/report-browser.component.js +18 -30
- package/dist/lib/report-browser-component/report-browser.component.js.map +1 -1
- package/dist/lib/resource-browser/resource-browser.component.js +435 -457
- package/dist/lib/resource-browser/resource-browser.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +12 -25
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.js +18 -31
- package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/query-resource.component.js +15 -28
- package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.js +35 -47
- package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/report-resource.component.js +15 -28
- package/dist/lib/resource-wrappers/report-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +21 -34
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +23 -37
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/single-application/single-application.component.js +15 -20
- package/dist/lib/single-application/single-application.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +81 -95
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +28 -29
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +51 -64
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +158 -165
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-entity/single-entity.component.js +106 -118
- package/dist/lib/single-entity/single-entity.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +265 -287
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-query/single-query.component.js +35 -44
- package/dist/lib/single-query/single-query.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.js +64 -73
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-report/single-report.component.js +33 -43
- package/dist/lib/single-report/single-report.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js +18 -30
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/single-view/single-view.component.js +107 -124
- package/dist/lib/single-view/single-view.component.js.map +1 -1
- package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js +197 -210
- package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +137 -155
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js +10 -8
- package/dist/lib/user-profile/user-profile.component.js.map +1 -1
- package/dist/module.js +51 -51
- package/dist/module.js.map +1 -1
- package/package.json +25 -25
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
11
2
|
import { Folder, Item, ItemType } from '../../generic/Item.types';
|
|
12
3
|
import { Subject, debounceTime } from 'rxjs';
|
|
@@ -239,6 +230,11 @@ function ResourceBrowserComponent_kendo_dialog_22_Template(rf, ctx) { if (rf & 1
|
|
|
239
230
|
i0.ɵɵconditional(ctx_r2.selectedFolder ? 9 : 10);
|
|
240
231
|
} }
|
|
241
232
|
export class ResourceBrowserComponent {
|
|
233
|
+
sharedService;
|
|
234
|
+
/*******************************************************************************************
|
|
235
|
+
* PROPERTIES
|
|
236
|
+
*******************************************************************************************/
|
|
237
|
+
_ResourceTypeName = null;
|
|
242
238
|
/**
|
|
243
239
|
* The name of the type of resource to display, cannot be changed after it is initially set
|
|
244
240
|
*/
|
|
@@ -254,12 +250,92 @@ export class ResourceBrowserComponent {
|
|
|
254
250
|
throw new Error('Resource Type cannot be changed after it has been set');
|
|
255
251
|
}
|
|
256
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Whether or not to enable categories. If enabled, Categories will be displayed
|
|
255
|
+
* and the option to create new categories will be available. Default is true.
|
|
256
|
+
*/
|
|
257
|
+
EnableCategories = true;
|
|
258
|
+
/**
|
|
259
|
+
* If Categories are enabled, then the categories fetched will be filtered to return only those whoses EntityID
|
|
260
|
+
* matches this value.
|
|
261
|
+
*/
|
|
262
|
+
CategoryEntityID = null;
|
|
263
|
+
/**
|
|
264
|
+
* If set, this will set the current Category/Folder for the display. Not all Resource Types support Categories, so if the Resource Type in question does not have a CategoryEntityID specified, this property will be ignored.
|
|
265
|
+
*/
|
|
266
|
+
CurrentCategoryID = null;
|
|
267
|
+
/**
|
|
268
|
+
* This property determines if the UI will include a button on items in the display to edit. The button will only be shown if the user has edit permissions, but this is a global setting to turn on/off the button even if the user has permissions. Default is true.
|
|
269
|
+
*/
|
|
270
|
+
EnableItemEdit = true;
|
|
271
|
+
/**
|
|
272
|
+
* This property determines if the UI will include a button on items in the display to delete. The button will only be shown if the user has delete permissions, but this is a global setting to turn on/off the button even if the user has permissions. Default is true.
|
|
273
|
+
*/
|
|
274
|
+
EnableItemDelete = true;
|
|
275
|
+
/**
|
|
276
|
+
* This proprerty determines if the UI will include a button on items in the display to unlink/remove a link to a shared resource (owned by another user).
|
|
277
|
+
* The button will only be shown if the user has permissions, but this is a global setting to turn on/off the button even if the user has permissions. Default is true.
|
|
278
|
+
*/
|
|
279
|
+
EnableRemoveLink = true;
|
|
280
|
+
/**
|
|
281
|
+
* The title to display, by default if not provided, we will use the ResourceType's Entity Name
|
|
282
|
+
*/
|
|
283
|
+
Title;
|
|
284
|
+
/**
|
|
285
|
+
* Optional, a SQL Where clause filter to apply to Items being loaded into the browser
|
|
286
|
+
*/
|
|
287
|
+
ItemFilter;
|
|
288
|
+
/**
|
|
289
|
+
* Optional, a valid expression to place into the RunView OrderBy property (don't include the keywords ORDER BY, just what is after ORDER BY)
|
|
290
|
+
*/
|
|
291
|
+
OrderBy;
|
|
292
|
+
/**
|
|
293
|
+
* Array of NewItemOption objects that will be displayed in the Create New dropdown. Defaults to having a single entry for creating a new folder, you can remove this or add to it.
|
|
294
|
+
*/
|
|
295
|
+
NewItemOptions = [];
|
|
296
|
+
/**
|
|
297
|
+
* The visual display mode for this component, tile will show the contents in tiles that are spaced and wrapped based on the viewport, list will show the details of the items in a list, and tree will show the items in a tree view - tree view NOT implemented yet
|
|
298
|
+
*/
|
|
299
|
+
DisplayMode = 'Tile';
|
|
300
|
+
/**
|
|
301
|
+
* Fires whenever a resource/item is selected within the component
|
|
302
|
+
*/
|
|
303
|
+
ResourceSelected = new EventEmitter();
|
|
304
|
+
/*******************************************************************************************
|
|
305
|
+
* EVENTS
|
|
306
|
+
*******************************************************************************************/
|
|
307
|
+
/**
|
|
308
|
+
* Fires whenever the category (e.g. the folder) the user is currently viewing changes. This can happen when a user creates a new folder and navigates to it, navigates to an existing folder, goes "up" in the folder hierarchy, etc.
|
|
309
|
+
*/
|
|
310
|
+
CategoryChanged = new EventEmitter();
|
|
311
|
+
/**
|
|
312
|
+
* Fires whenever the user changes the display mode of the component
|
|
313
|
+
*/
|
|
314
|
+
DisplayModeChanged = new EventEmitter();
|
|
315
|
+
/**
|
|
316
|
+
* Fires whenever the user clicks the back button to view the parent folder
|
|
317
|
+
*/
|
|
318
|
+
NavigateToParentEvent = new EventEmitter();
|
|
319
|
+
/**
|
|
320
|
+
* Fires whenever the users clicks to edit an Item that is not a folder
|
|
321
|
+
*/
|
|
322
|
+
EditItemEvent = new EventEmitter();
|
|
323
|
+
/**
|
|
324
|
+
* Fires whenever the users clicks to edit an Item that is not a folder
|
|
325
|
+
*/
|
|
326
|
+
DeleteItemEvent = new EventEmitter();
|
|
327
|
+
/**
|
|
328
|
+
* The current Resource Type (BaseEntity derived class), automatically is populated after init based on the ResourceType string
|
|
329
|
+
*/
|
|
330
|
+
ResourceType;
|
|
331
|
+
_isLoading = false;
|
|
257
332
|
/**
|
|
258
333
|
* This property will be true whenever the component is in the process of loading data
|
|
259
334
|
*/
|
|
260
335
|
get IsLoading() {
|
|
261
336
|
return this._isLoading;
|
|
262
337
|
}
|
|
338
|
+
_CategoryIDFieldName;
|
|
263
339
|
/**
|
|
264
340
|
* This is the field name in the Resource Type's Entity that is used to store the CategoryID (e.g. the Folder ID) for the resource.
|
|
265
341
|
* Not all entities in resource types support a CategoryID concept, so this can be null. This property is read only and
|
|
@@ -268,6 +344,7 @@ export class ResourceBrowserComponent {
|
|
|
268
344
|
get CategoryIDFieldName() {
|
|
269
345
|
return this._CategoryIDFieldName;
|
|
270
346
|
}
|
|
347
|
+
_CategoryParentIDFieldName = undefined;
|
|
271
348
|
/**
|
|
272
349
|
* This is the field name in the Resource type's Category Entity, if a Category Entity was provided, that has the recursive/self-referencing foreign key to the parent category.
|
|
273
350
|
* This field is read only and is auto-populated during the configuration of the component.
|
|
@@ -275,6 +352,7 @@ export class ResourceBrowserComponent {
|
|
|
275
352
|
get CategoryParentIDFieldName() {
|
|
276
353
|
return this._CategoryParentIDFieldName;
|
|
277
354
|
}
|
|
355
|
+
_UserIDFieldName = undefined;
|
|
278
356
|
/**
|
|
279
357
|
* This is the field name in the Resource Type's Entity that is used to store the UserID of the user that OWNS the resource. Commonly, but not always a field called UserID, but can be
|
|
280
358
|
* any field in the Resource Type's entity that is a foreign key to the Users entity. This property is read only and is auto-populated during the configuration of the component.
|
|
@@ -282,246 +360,167 @@ export class ResourceBrowserComponent {
|
|
|
282
360
|
get UserIDFieldName() {
|
|
283
361
|
return this._UserIDFieldName;
|
|
284
362
|
}
|
|
363
|
+
_items = [];
|
|
285
364
|
/**
|
|
286
365
|
* The current list of items being displayed in the browser, DO NOT MODIFY THIS! This is read only and is auto-populated by the component.
|
|
287
366
|
*/
|
|
288
367
|
get Items() {
|
|
289
368
|
return this._items;
|
|
290
369
|
}
|
|
370
|
+
_DefaultNewItemOptions = [
|
|
371
|
+
{
|
|
372
|
+
Text: 'New Folder',
|
|
373
|
+
Description: 'Create a new Folder',
|
|
374
|
+
Icon: 'folder',
|
|
375
|
+
Action: () => {
|
|
376
|
+
if (this.EnableCategories) {
|
|
377
|
+
this.toggleUpsertFolderView(true, true);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
];
|
|
291
382
|
get ItemOptions() {
|
|
292
383
|
return this._DefaultNewItemOptions;
|
|
293
384
|
}
|
|
385
|
+
upsertNewFolderName = "";
|
|
386
|
+
upsertNewFolderDescription = "";
|
|
387
|
+
selectedFolder = null;
|
|
388
|
+
// JS code here and below from old component....
|
|
389
|
+
_filterDebounceTime = 250;
|
|
390
|
+
filterItemsSubject = new Subject();
|
|
391
|
+
filter = '';
|
|
392
|
+
sourceItems = null;
|
|
393
|
+
selectedItem = null;
|
|
394
|
+
deleteDialogOpened = false;
|
|
395
|
+
copyFromDialogOpened = false;
|
|
396
|
+
upsertFolderDialogVisible = false;
|
|
397
|
+
_allResourceTypes = [];
|
|
398
|
+
entityObjectName = "";
|
|
294
399
|
constructor(sharedService) {
|
|
295
400
|
this.sharedService = sharedService;
|
|
296
|
-
/*******************************************************************************************
|
|
297
|
-
* PROPERTIES
|
|
298
|
-
*******************************************************************************************/
|
|
299
|
-
this._ResourceTypeName = null;
|
|
300
|
-
/**
|
|
301
|
-
* Whether or not to enable categories. If enabled, Categories will be displayed
|
|
302
|
-
* and the option to create new categories will be available. Default is true.
|
|
303
|
-
*/
|
|
304
|
-
this.EnableCategories = true;
|
|
305
|
-
/**
|
|
306
|
-
* If Categories are enabled, then the categories fetched will be filtered to return only those whoses EntityID
|
|
307
|
-
* matches this value.
|
|
308
|
-
*/
|
|
309
|
-
this.CategoryEntityID = null;
|
|
310
|
-
/**
|
|
311
|
-
* If set, this will set the current Category/Folder for the display. Not all Resource Types support Categories, so if the Resource Type in question does not have a CategoryEntityID specified, this property will be ignored.
|
|
312
|
-
*/
|
|
313
|
-
this.CurrentCategoryID = null;
|
|
314
|
-
/**
|
|
315
|
-
* This property determines if the UI will include a button on items in the display to edit. The button will only be shown if the user has edit permissions, but this is a global setting to turn on/off the button even if the user has permissions. Default is true.
|
|
316
|
-
*/
|
|
317
|
-
this.EnableItemEdit = true;
|
|
318
|
-
/**
|
|
319
|
-
* This property determines if the UI will include a button on items in the display to delete. The button will only be shown if the user has delete permissions, but this is a global setting to turn on/off the button even if the user has permissions. Default is true.
|
|
320
|
-
*/
|
|
321
|
-
this.EnableItemDelete = true;
|
|
322
|
-
/**
|
|
323
|
-
* This proprerty determines if the UI will include a button on items in the display to unlink/remove a link to a shared resource (owned by another user).
|
|
324
|
-
* The button will only be shown if the user has permissions, but this is a global setting to turn on/off the button even if the user has permissions. Default is true.
|
|
325
|
-
*/
|
|
326
|
-
this.EnableRemoveLink = true;
|
|
327
|
-
/**
|
|
328
|
-
* Array of NewItemOption objects that will be displayed in the Create New dropdown. Defaults to having a single entry for creating a new folder, you can remove this or add to it.
|
|
329
|
-
*/
|
|
330
|
-
this.NewItemOptions = [];
|
|
331
|
-
/**
|
|
332
|
-
* The visual display mode for this component, tile will show the contents in tiles that are spaced and wrapped based on the viewport, list will show the details of the items in a list, and tree will show the items in a tree view - tree view NOT implemented yet
|
|
333
|
-
*/
|
|
334
|
-
this.DisplayMode = 'Tile';
|
|
335
|
-
/**
|
|
336
|
-
* Fires whenever a resource/item is selected within the component
|
|
337
|
-
*/
|
|
338
|
-
this.ResourceSelected = new EventEmitter();
|
|
339
|
-
/*******************************************************************************************
|
|
340
|
-
* EVENTS
|
|
341
|
-
*******************************************************************************************/
|
|
342
|
-
/**
|
|
343
|
-
* Fires whenever the category (e.g. the folder) the user is currently viewing changes. This can happen when a user creates a new folder and navigates to it, navigates to an existing folder, goes "up" in the folder hierarchy, etc.
|
|
344
|
-
*/
|
|
345
|
-
this.CategoryChanged = new EventEmitter();
|
|
346
|
-
/**
|
|
347
|
-
* Fires whenever the user changes the display mode of the component
|
|
348
|
-
*/
|
|
349
|
-
this.DisplayModeChanged = new EventEmitter();
|
|
350
|
-
/**
|
|
351
|
-
* Fires whenever the user clicks the back button to view the parent folder
|
|
352
|
-
*/
|
|
353
|
-
this.NavigateToParentEvent = new EventEmitter();
|
|
354
|
-
/**
|
|
355
|
-
* Fires whenever the users clicks to edit an Item that is not a folder
|
|
356
|
-
*/
|
|
357
|
-
this.EditItemEvent = new EventEmitter();
|
|
358
|
-
/**
|
|
359
|
-
* Fires whenever the users clicks to edit an Item that is not a folder
|
|
360
|
-
*/
|
|
361
|
-
this.DeleteItemEvent = new EventEmitter();
|
|
362
|
-
this._isLoading = false;
|
|
363
|
-
this._CategoryParentIDFieldName = undefined;
|
|
364
|
-
this._UserIDFieldName = undefined;
|
|
365
|
-
this._items = [];
|
|
366
|
-
this._DefaultNewItemOptions = [
|
|
367
|
-
{
|
|
368
|
-
Text: 'New Folder',
|
|
369
|
-
Description: 'Create a new Folder',
|
|
370
|
-
Icon: 'folder',
|
|
371
|
-
Action: () => {
|
|
372
|
-
if (this.EnableCategories) {
|
|
373
|
-
this.toggleUpsertFolderView(true, true);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
];
|
|
378
|
-
this.upsertNewFolderName = "";
|
|
379
|
-
this.upsertNewFolderDescription = "";
|
|
380
|
-
this.selectedFolder = null;
|
|
381
|
-
// JS code here and below from old component....
|
|
382
|
-
this._filterDebounceTime = 250;
|
|
383
|
-
this.filterItemsSubject = new Subject();
|
|
384
|
-
this.filter = '';
|
|
385
|
-
this.sourceItems = null;
|
|
386
|
-
this.selectedItem = null;
|
|
387
|
-
this.deleteDialogOpened = false;
|
|
388
|
-
this.copyFromDialogOpened = false;
|
|
389
|
-
this.upsertFolderDialogVisible = false;
|
|
390
|
-
this._allResourceTypes = [];
|
|
391
|
-
this.entityObjectName = "";
|
|
392
|
-
this._currentDeleteOrUnlinkState = false;
|
|
393
401
|
this.filterItemsSubject
|
|
394
402
|
.pipe(debounceTime(this._filterDebounceTime))
|
|
395
403
|
.subscribe(() => this.filterItems(this.filter));
|
|
396
404
|
}
|
|
397
|
-
ngOnInit() {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
const resourceType = this._allResourceTypes.find(rt => {
|
|
411
|
-
return rt.Entity === this.ResourceTypeName;
|
|
412
|
-
});
|
|
413
|
-
if (!resourceType) {
|
|
414
|
-
throw new Error(`Resource Type ${this.ResourceTypeName} not found`);
|
|
415
|
-
}
|
|
416
|
-
this.ResourceType = resourceType;
|
|
417
|
-
if (!this.ResourceType.EntityID) {
|
|
418
|
-
throw new Error(`Resource Type ${this.ResourceTypeName} does not have an EntityID specified. EntityID is required for any Resource Type to be used with this component.`);
|
|
419
|
-
}
|
|
420
|
-
// now get the entity info for the resource type and for its category entity, if one is specified.
|
|
421
|
-
const md = new Metadata();
|
|
422
|
-
const resourceTypeEntity = md.EntityByID(this.ResourceType.EntityID);
|
|
423
|
-
const categoryEntity = this.ResourceType.CategoryEntityID ? md.EntityByID(this.ResourceType.CategoryEntityID) : null;
|
|
424
|
-
// figure out the column inside the entity that points to the categoryEntity, if we have a category entity
|
|
425
|
-
if (categoryEntity) {
|
|
426
|
-
this._CategoryIDFieldName = (_a = resourceTypeEntity.Fields.find(f => f.RelatedEntityID === categoryEntity.ID)) === null || _a === void 0 ? void 0 : _a.Name;
|
|
427
|
-
const usersEntity = md.EntityByName("Users");
|
|
428
|
-
this._UserIDFieldName = (_b = resourceTypeEntity.Fields.find(f => f.RelatedEntityID === usersEntity.ID)) === null || _b === void 0 ? void 0 : _b.Name;
|
|
429
|
-
this._CategoryParentIDFieldName = (_c = categoryEntity.Fields.find(f => f.RelatedEntityID === categoryEntity.ID)) === null || _c === void 0 ? void 0 : _c.Name;
|
|
430
|
-
}
|
|
431
|
-
yield this.Refresh();
|
|
405
|
+
async ngOnInit() {
|
|
406
|
+
/**
|
|
407
|
+
* Hide the create folder option is EnableCategories is false
|
|
408
|
+
*/
|
|
409
|
+
if (this.EnableCategories) {
|
|
410
|
+
this._DefaultNewItemOptions.push(...this.NewItemOptions);
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
this._DefaultNewItemOptions = this.NewItemOptions;
|
|
414
|
+
}
|
|
415
|
+
this._allResourceTypes = this.sharedService.ResourceTypes;
|
|
416
|
+
const resourceType = this._allResourceTypes.find(rt => {
|
|
417
|
+
return rt.Entity === this.ResourceTypeName;
|
|
432
418
|
});
|
|
419
|
+
if (!resourceType) {
|
|
420
|
+
throw new Error(`Resource Type ${this.ResourceTypeName} not found`);
|
|
421
|
+
}
|
|
422
|
+
this.ResourceType = resourceType;
|
|
423
|
+
if (!this.ResourceType.EntityID) {
|
|
424
|
+
throw new Error(`Resource Type ${this.ResourceTypeName} does not have an EntityID specified. EntityID is required for any Resource Type to be used with this component.`);
|
|
425
|
+
}
|
|
426
|
+
// now get the entity info for the resource type and for its category entity, if one is specified.
|
|
427
|
+
const md = new Metadata();
|
|
428
|
+
const resourceTypeEntity = md.EntityByID(this.ResourceType.EntityID);
|
|
429
|
+
const categoryEntity = this.ResourceType.CategoryEntityID ? md.EntityByID(this.ResourceType.CategoryEntityID) : null;
|
|
430
|
+
// figure out the column inside the entity that points to the categoryEntity, if we have a category entity
|
|
431
|
+
if (categoryEntity) {
|
|
432
|
+
this._CategoryIDFieldName = resourceTypeEntity.Fields.find(f => f.RelatedEntityID === categoryEntity.ID)?.Name;
|
|
433
|
+
const usersEntity = md.EntityByName("Users");
|
|
434
|
+
this._UserIDFieldName = resourceTypeEntity.Fields.find(f => f.RelatedEntityID === usersEntity.ID)?.Name;
|
|
435
|
+
this._CategoryParentIDFieldName = categoryEntity.Fields.find(f => f.RelatedEntityID === categoryEntity.ID)?.Name;
|
|
436
|
+
}
|
|
437
|
+
await this.Refresh();
|
|
433
438
|
}
|
|
434
439
|
/**
|
|
435
440
|
* Refresh the component from the database based on other current state variables.
|
|
436
441
|
*/
|
|
437
|
-
Refresh() {
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
442
|
+
async Refresh() {
|
|
443
|
+
const views = await this.LoadResources();
|
|
444
|
+
const categories = await this.LoadCategories();
|
|
445
|
+
const items = [...categories, ...views];
|
|
446
|
+
const sortedItems = this.sortItems(items);
|
|
447
|
+
this._items = sortedItems;
|
|
448
|
+
}
|
|
449
|
+
async LoadResources() {
|
|
450
|
+
let results = [];
|
|
451
|
+
if (!this.ResourceType || !this.ResourceType.Entity) {
|
|
452
|
+
return results;
|
|
453
|
+
}
|
|
454
|
+
const md = new Metadata();
|
|
455
|
+
const rv = new RunView();
|
|
456
|
+
// create a combined filter for the SQL query that combines the user's provided ItemFilter, if provided, with a user filter that only includes items that are OWNED by the current user
|
|
457
|
+
// and finally filter on the current category, if one is set and we have a category entity
|
|
458
|
+
let filter = "";
|
|
459
|
+
if (this.ItemFilter) {
|
|
460
|
+
filter += `(${this.ItemFilter})`;
|
|
461
|
+
}
|
|
462
|
+
if (this.UserIDFieldName) {
|
|
463
|
+
let base = this.ItemFilter ? "AND " : " ";
|
|
464
|
+
filter += `${base}([${this.UserIDFieldName}] = '${md.CurrentUser.ID}')`;
|
|
465
|
+
}
|
|
466
|
+
if (this.CurrentCategoryID && this.CategoryIDFieldName) {
|
|
467
|
+
let base = (this.ItemFilter || this.UserIDFieldName) ? "AND " : " ";
|
|
468
|
+
filter += `${base}([${this.CategoryIDFieldName}] = '${this.CurrentCategoryID}')`;
|
|
469
|
+
}
|
|
470
|
+
const itemResult = await rv.RunView({
|
|
471
|
+
EntityName: this.ResourceType.Entity,
|
|
472
|
+
ExtraFilter: filter,
|
|
473
|
+
OrderBy: this.OrderBy,
|
|
474
|
+
ResultType: 'entity_object'
|
|
444
475
|
});
|
|
476
|
+
if (!itemResult.Success) {
|
|
477
|
+
LogError(`Unable to load views for ${this.ResourceType.Entity}. Reason: ${itemResult.ErrorMessage}`);
|
|
478
|
+
return results;
|
|
479
|
+
;
|
|
480
|
+
}
|
|
481
|
+
const views = itemResult.Results;
|
|
482
|
+
const items = views.map(view => new Item(view, ItemType.Resource));
|
|
483
|
+
return items;
|
|
445
484
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
const itemResult = yield rv.RunView({
|
|
469
|
-
EntityName: this.ResourceType.Entity,
|
|
470
|
-
ExtraFilter: filter,
|
|
471
|
-
OrderBy: this.OrderBy,
|
|
472
|
-
ResultType: 'entity_object'
|
|
473
|
-
});
|
|
474
|
-
if (!itemResult.Success) {
|
|
475
|
-
LogError(`Unable to load views for ${this.ResourceType.Entity}. Reason: ${itemResult.ErrorMessage}`);
|
|
476
|
-
return results;
|
|
477
|
-
;
|
|
478
|
-
}
|
|
479
|
-
const views = itemResult.Results;
|
|
480
|
-
const items = views.map(view => new Item(view, ItemType.Resource));
|
|
481
|
-
return items;
|
|
485
|
+
async LoadCategories() {
|
|
486
|
+
if (!this.EnableCategories) {
|
|
487
|
+
return [];
|
|
488
|
+
}
|
|
489
|
+
if (!this.ResourceType || !this.ResourceType.CategoryEntity) {
|
|
490
|
+
return [];
|
|
491
|
+
}
|
|
492
|
+
const md = new Metadata();
|
|
493
|
+
const categoryEntity = md.EntityByName(this.ResourceType.CategoryEntity);
|
|
494
|
+
if (!categoryEntity) {
|
|
495
|
+
LogError(`Category Entity ${this.ResourceType.CategoryEntity} not found`);
|
|
496
|
+
return [];
|
|
497
|
+
}
|
|
498
|
+
const hasEntityIDField = categoryEntity.Fields.some(field => field.Name === "EntityID");
|
|
499
|
+
let filter = `UserID = '${md.CurrentUser.ID}'`;
|
|
500
|
+
filter += this.CurrentCategoryID ? ` AND ParentID = '${this.CurrentCategoryID}' ` : " AND ParentID IS NULL ";
|
|
501
|
+
filter += hasEntityIDField ? ` AND EntityID = '${this.ResourceType.EntityID}'` : "";
|
|
502
|
+
const rv = new RunView();
|
|
503
|
+
const rvResult = await rv.RunView({
|
|
504
|
+
EntityName: this.ResourceType.CategoryEntity,
|
|
505
|
+
ExtraFilter: filter,
|
|
506
|
+
ResultType: 'entity_object'
|
|
482
507
|
});
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
const
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
return [];
|
|
497
|
-
}
|
|
498
|
-
const hasEntityIDField = categoryEntity.Fields.some(field => field.Name === "EntityID");
|
|
499
|
-
let filter = `UserID = '${md.CurrentUser.ID}'`;
|
|
500
|
-
filter += this.CurrentCategoryID ? ` AND ParentID = '${this.CurrentCategoryID}' ` : " AND ParentID IS NULL ";
|
|
501
|
-
filter += hasEntityIDField ? ` AND EntityID = '${this.ResourceType.EntityID}'` : "";
|
|
502
|
-
const rv = new RunView();
|
|
503
|
-
const rvResult = yield rv.RunView({
|
|
504
|
-
EntityName: this.ResourceType.CategoryEntity,
|
|
505
|
-
ExtraFilter: filter,
|
|
506
|
-
ResultType: 'entity_object'
|
|
507
|
-
});
|
|
508
|
-
if (!rvResult.Success) {
|
|
509
|
-
LogError(`Unable to load categories for ${this.ResourceType.CategoryEntity}. Reason: ${rvResult.ErrorMessage}`);
|
|
510
|
-
return [];
|
|
511
|
-
}
|
|
512
|
-
const categories = rvResult.Results;
|
|
513
|
-
const folders = categories.map((category) => {
|
|
514
|
-
const folderID = category.FirstPrimaryKey.Value;
|
|
515
|
-
const NameEntityField = category.Fields.find(field => field.EntityFieldInfo.IsNameField);
|
|
516
|
-
const folderName = NameEntityField ? NameEntityField.Value : "Folder";
|
|
517
|
-
const folder = new Folder(folderID, folderName);
|
|
518
|
-
folder.CategoryEntity = category;
|
|
519
|
-
folder.Description = category.Get("Description");
|
|
520
|
-
return folder;
|
|
521
|
-
});
|
|
522
|
-
const items = folders.map(folder => new Item(folder, ItemType.Folder));
|
|
523
|
-
return items;
|
|
508
|
+
if (!rvResult.Success) {
|
|
509
|
+
LogError(`Unable to load categories for ${this.ResourceType.CategoryEntity}. Reason: ${rvResult.ErrorMessage}`);
|
|
510
|
+
return [];
|
|
511
|
+
}
|
|
512
|
+
const categories = rvResult.Results;
|
|
513
|
+
const folders = categories.map((category) => {
|
|
514
|
+
const folderID = category.FirstPrimaryKey.Value;
|
|
515
|
+
const NameEntityField = category.Fields.find(field => field.EntityFieldInfo.IsNameField);
|
|
516
|
+
const folderName = NameEntityField ? NameEntityField.Value : "Folder";
|
|
517
|
+
const folder = new Folder(folderID, folderName);
|
|
518
|
+
folder.CategoryEntity = category;
|
|
519
|
+
folder.Description = category.Get("Description");
|
|
520
|
+
return folder;
|
|
524
521
|
});
|
|
522
|
+
const items = folders.map(folder => new Item(folder, ItemType.Folder));
|
|
523
|
+
return items;
|
|
525
524
|
}
|
|
526
525
|
//maybe pass in a sort function for custom sorting?
|
|
527
526
|
sortItems(items) {
|
|
@@ -548,193 +547,174 @@ export class ResourceBrowserComponent {
|
|
|
548
547
|
}
|
|
549
548
|
this.ResourceSelected.emit(item);
|
|
550
549
|
}
|
|
551
|
-
updateFolder() {
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
this.toggleUpsertFolderView(false, false);
|
|
572
|
-
});
|
|
573
|
-
}
|
|
574
|
-
createFolder() {
|
|
575
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
576
|
-
if (!this.ResourceType.CategoryEntity) {
|
|
577
|
-
LogError("ResourceType.CategoryEntity is not set, cannot create folder");
|
|
578
|
-
this.sharedService.CreateSimpleNotification("Unable to create folder", "error", 1500);
|
|
579
|
-
return;
|
|
580
|
-
}
|
|
581
|
-
const md = new Metadata();
|
|
582
|
-
const folderEntity = yield md.GetEntityObject(this.ResourceType.CategoryEntity);
|
|
583
|
-
folderEntity.NewRecord();
|
|
584
|
-
folderEntity.Set("Name", this.upsertNewFolderName);
|
|
585
|
-
folderEntity.Set("Description", this.upsertNewFolderDescription);
|
|
586
|
-
folderEntity.Set("ParentID", this.CurrentCategoryID);
|
|
587
|
-
folderEntity.Set("UserID", md.CurrentUser.ID);
|
|
588
|
-
folderEntity.Set("EntityID", this.CategoryEntityID);
|
|
589
|
-
let saveResult = yield folderEntity.Save();
|
|
590
|
-
if (!saveResult) {
|
|
591
|
-
this.sharedService.CreateSimpleNotification(`Unable to create folder ${this.upsertNewFolderName}`, "error", 1500);
|
|
592
|
-
LogError(`Unable to create folder ${this.upsertNewFolderName}`, undefined, folderEntity.LatestResult);
|
|
593
|
-
}
|
|
594
|
-
this.toggleUpsertFolderView(false, false);
|
|
595
|
-
this.sharedService.CreateSimpleNotification(`successfully created folder ${this.upsertNewFolderName}`, 'success', 1500);
|
|
596
|
-
let folder = new Folder(folderEntity.Get("ID"), folderEntity.Get("Name"));
|
|
597
|
-
folder.ParentFolderID = folderEntity.Get("ParentID");
|
|
598
|
-
folder.Description = folderEntity.Get("Description");
|
|
599
|
-
let item = new Item(folder, ItemType.Folder);
|
|
600
|
-
//navigate to the newly created folder
|
|
601
|
-
//by raising an item click event
|
|
602
|
-
this.itemClick(item);
|
|
603
|
-
});
|
|
604
|
-
}
|
|
605
|
-
unlinkItem(item) {
|
|
606
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
607
|
-
yield this.deleteOrUnlink(item, false);
|
|
608
|
-
});
|
|
550
|
+
async updateFolder() {
|
|
551
|
+
const folder = this.selectedFolder;
|
|
552
|
+
if (!folder || !folder.CategoryEntity) {
|
|
553
|
+
LogError("Folder or CategoryEntity is not set, cannot update folder");
|
|
554
|
+
this.sharedService.CreateSimpleNotification("Unable to update folder", "error", 2500);
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
const categoryEntity = folder.CategoryEntity;
|
|
558
|
+
categoryEntity.Set("Name", this.upsertNewFolderName);
|
|
559
|
+
categoryEntity.Set("Description", this.upsertNewFolderDescription);
|
|
560
|
+
const saveResult = await categoryEntity.Save();
|
|
561
|
+
if (!saveResult) {
|
|
562
|
+
LogError(`Unable to update folder ${folder.Name}`, undefined, categoryEntity.LatestResult);
|
|
563
|
+
this.sharedService.CreateSimpleNotification(`Unable to update folder ${folder.Name}`, "error", 2500);
|
|
564
|
+
}
|
|
565
|
+
else {
|
|
566
|
+
this.sharedService.CreateSimpleNotification(`Successfully updated folder ${folder.Name}`, "info", 2500);
|
|
567
|
+
await this.Refresh();
|
|
568
|
+
}
|
|
569
|
+
this.toggleUpsertFolderView(false, false);
|
|
609
570
|
}
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
571
|
+
async createFolder() {
|
|
572
|
+
if (!this.ResourceType.CategoryEntity) {
|
|
573
|
+
LogError("ResourceType.CategoryEntity is not set, cannot create folder");
|
|
574
|
+
this.sharedService.CreateSimpleNotification("Unable to create folder", "error", 1500);
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
const md = new Metadata();
|
|
578
|
+
const folderEntity = await md.GetEntityObject(this.ResourceType.CategoryEntity);
|
|
579
|
+
folderEntity.NewRecord();
|
|
580
|
+
folderEntity.Set("Name", this.upsertNewFolderName);
|
|
581
|
+
folderEntity.Set("Description", this.upsertNewFolderDescription);
|
|
582
|
+
folderEntity.Set("ParentID", this.CurrentCategoryID);
|
|
583
|
+
folderEntity.Set("UserID", md.CurrentUser.ID);
|
|
584
|
+
folderEntity.Set("EntityID", this.CategoryEntityID);
|
|
585
|
+
let saveResult = await folderEntity.Save();
|
|
586
|
+
if (!saveResult) {
|
|
587
|
+
this.sharedService.CreateSimpleNotification(`Unable to create folder ${this.upsertNewFolderName}`, "error", 1500);
|
|
588
|
+
LogError(`Unable to create folder ${this.upsertNewFolderName}`, undefined, folderEntity.LatestResult);
|
|
589
|
+
}
|
|
590
|
+
this.toggleUpsertFolderView(false, false);
|
|
591
|
+
this.sharedService.CreateSimpleNotification(`successfully created folder ${this.upsertNewFolderName}`, 'success', 1500);
|
|
592
|
+
let folder = new Folder(folderEntity.Get("ID"), folderEntity.Get("Name"));
|
|
593
|
+
folder.ParentFolderID = folderEntity.Get("ParentID");
|
|
594
|
+
folder.Description = folderEntity.Get("Description");
|
|
595
|
+
let item = new Item(folder, ItemType.Folder);
|
|
596
|
+
//navigate to the newly created folder
|
|
597
|
+
//by raising an item click event
|
|
598
|
+
this.itemClick(item);
|
|
599
|
+
}
|
|
600
|
+
async unlinkItem(item) {
|
|
601
|
+
await this.deleteOrUnlink(item, false);
|
|
602
|
+
}
|
|
603
|
+
_currentDeleteOrUnlinkState = false;
|
|
604
|
+
async deleteOrUnlink(item, bDelete) {
|
|
605
|
+
if (!item) {
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
608
|
+
this._currentDeleteOrUnlinkState = bDelete;
|
|
609
|
+
this.selectedItem = item;
|
|
610
|
+
if (item.Type === ItemType.Folder && bDelete) {
|
|
611
|
+
this.deleteDialogOpened = true;
|
|
612
|
+
}
|
|
613
|
+
else if (item.Type === ItemType.Resource && bDelete) {
|
|
614
|
+
this.deleteDialogOpened = true;
|
|
615
|
+
}
|
|
616
|
+
else if (item.Type === ItemType.Resource && !bDelete) {
|
|
617
|
+
this.deleteDialogOpened = true;
|
|
618
|
+
}
|
|
627
619
|
}
|
|
628
620
|
goToParent() {
|
|
629
621
|
this.NavigateToParentEvent.emit();
|
|
630
622
|
}
|
|
631
|
-
deleteItem(item) {
|
|
632
|
-
|
|
633
|
-
yield this.deleteOrUnlink(item, true);
|
|
634
|
-
});
|
|
635
|
-
}
|
|
636
|
-
onConfirmDeleteItem(shouldDelete) {
|
|
637
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
638
|
-
if (!this.selectedItem || !shouldDelete) {
|
|
639
|
-
LogError("Selected item is not set or shouldDelete is false");
|
|
640
|
-
return;
|
|
641
|
-
}
|
|
642
|
-
this.deleteDialogOpened = false;
|
|
643
|
-
let item = this.selectedItem;
|
|
644
|
-
let success = false;
|
|
645
|
-
if (item.Type === ItemType.Folder && this._currentDeleteOrUnlinkState) {
|
|
646
|
-
success = yield this.deleteFolder(item);
|
|
647
|
-
}
|
|
648
|
-
else if (item.Type === ItemType.Resource && this._currentDeleteOrUnlinkState) {
|
|
649
|
-
success = yield this.deleteResource(item);
|
|
650
|
-
}
|
|
651
|
-
else if (item.Type === ItemType.Resource && !this._currentDeleteOrUnlinkState) {
|
|
652
|
-
success = yield this.unlinkResource(item);
|
|
653
|
-
}
|
|
654
|
-
this.selectedItem = null;
|
|
655
|
-
if (success) {
|
|
656
|
-
yield this.Refresh();
|
|
657
|
-
}
|
|
658
|
-
});
|
|
659
|
-
}
|
|
660
|
-
deleteFolder(item) {
|
|
661
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
662
|
-
const folder = item.Data;
|
|
663
|
-
if (!folder || !folder.CategoryEntity) {
|
|
664
|
-
LogError("Folder or CategoryEntity is not set, cannot delete folder");
|
|
665
|
-
this.sharedService.CreateSimpleNotification("Unable to delete folder", "error", 2500);
|
|
666
|
-
return false;
|
|
667
|
-
}
|
|
668
|
-
const hasChildren = yield this.doesFolderHaveChildren(folder.ID);
|
|
669
|
-
if (hasChildren) {
|
|
670
|
-
this.sharedService.CreateSimpleNotification(`Unable to delete Folder ${folder.Name} because it has children`, "error", 2500);
|
|
671
|
-
return false;
|
|
672
|
-
}
|
|
673
|
-
const categoryEntity = folder.CategoryEntity;
|
|
674
|
-
const deleteResult = yield categoryEntity.Delete();
|
|
675
|
-
if (!deleteResult) {
|
|
676
|
-
LogError(`Unable to delete folder ${folder.Name}`, undefined, categoryEntity.LatestResult);
|
|
677
|
-
this.sharedService.CreateSimpleNotification(`unable to delete folder ${folder.Name}.`, "error", 2500);
|
|
678
|
-
return false;
|
|
679
|
-
}
|
|
680
|
-
this.sharedService.CreateSimpleNotification(`Successfully deleted folder ${folder.Name}`, "info", 2500);
|
|
681
|
-
return true;
|
|
682
|
-
});
|
|
623
|
+
async deleteItem(item) {
|
|
624
|
+
await this.deleteOrUnlink(item, true);
|
|
683
625
|
}
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
});
|
|
626
|
+
async onConfirmDeleteItem(shouldDelete) {
|
|
627
|
+
if (!this.selectedItem || !shouldDelete) {
|
|
628
|
+
LogError("Selected item is not set or shouldDelete is false");
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
this.deleteDialogOpened = false;
|
|
632
|
+
let item = this.selectedItem;
|
|
633
|
+
let success = false;
|
|
634
|
+
if (item.Type === ItemType.Folder && this._currentDeleteOrUnlinkState) {
|
|
635
|
+
success = await this.deleteFolder(item);
|
|
636
|
+
}
|
|
637
|
+
else if (item.Type === ItemType.Resource && this._currentDeleteOrUnlinkState) {
|
|
638
|
+
success = await this.deleteResource(item);
|
|
639
|
+
}
|
|
640
|
+
else if (item.Type === ItemType.Resource && !this._currentDeleteOrUnlinkState) {
|
|
641
|
+
success = await this.unlinkResource(item);
|
|
642
|
+
}
|
|
643
|
+
this.selectedItem = null;
|
|
644
|
+
if (success) {
|
|
645
|
+
await this.Refresh();
|
|
646
|
+
}
|
|
706
647
|
}
|
|
707
|
-
|
|
708
|
-
|
|
648
|
+
async deleteFolder(item) {
|
|
649
|
+
const folder = item.Data;
|
|
650
|
+
if (!folder || !folder.CategoryEntity) {
|
|
651
|
+
LogError("Folder or CategoryEntity is not set, cannot delete folder");
|
|
652
|
+
this.sharedService.CreateSimpleNotification("Unable to delete folder", "error", 2500);
|
|
653
|
+
return false;
|
|
654
|
+
}
|
|
655
|
+
const hasChildren = await this.doesFolderHaveChildren(folder.ID);
|
|
656
|
+
if (hasChildren) {
|
|
657
|
+
this.sharedService.CreateSimpleNotification(`Unable to delete Folder ${folder.Name} because it has children`, "error", 2500);
|
|
658
|
+
return false;
|
|
659
|
+
}
|
|
660
|
+
const categoryEntity = folder.CategoryEntity;
|
|
661
|
+
const deleteResult = await categoryEntity.Delete();
|
|
662
|
+
if (!deleteResult) {
|
|
663
|
+
LogError(`Unable to delete folder ${folder.Name}`, undefined, categoryEntity.LatestResult);
|
|
664
|
+
this.sharedService.CreateSimpleNotification(`unable to delete folder ${folder.Name}.`, "error", 2500);
|
|
665
|
+
return false;
|
|
666
|
+
}
|
|
667
|
+
this.sharedService.CreateSimpleNotification(`Successfully deleted folder ${folder.Name}`, "info", 2500);
|
|
668
|
+
return true;
|
|
669
|
+
}
|
|
670
|
+
async deleteResource(item) {
|
|
671
|
+
let genericEntity = item.Data;
|
|
672
|
+
if (!genericEntity) {
|
|
673
|
+
LogError("Item Data is not set, cannot delete resource");
|
|
674
|
+
return false;
|
|
675
|
+
}
|
|
676
|
+
const deleteEvent = new BeforeDeleteItemEvent(item);
|
|
677
|
+
this.DeleteItemEvent.emit(deleteEvent);
|
|
678
|
+
if (deleteEvent.Cancel) {
|
|
679
|
+
//parent will handle deletion, so we can return early
|
|
709
680
|
return true;
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
681
|
+
}
|
|
682
|
+
const entity = item.Data;
|
|
683
|
+
const deleteResult = await entity.Delete();
|
|
684
|
+
if (!deleteResult) {
|
|
685
|
+
LogError(`Unable to delete ${item.Name}`, undefined, entity.LatestResult);
|
|
686
|
+
this.sharedService.CreateSimpleNotification(`Unable to delete ${item.Name}`, "error", 2500);
|
|
687
|
+
return false;
|
|
688
|
+
}
|
|
689
|
+
return true;
|
|
690
|
+
}
|
|
691
|
+
async unlinkResource(item) {
|
|
692
|
+
return true;
|
|
693
|
+
// // remove the link by removing the Resource Link record
|
|
694
|
+
// if (item.ResourceLinkID) {
|
|
695
|
+
// const md = new Metadata();
|
|
696
|
+
// const link = await md.GetEntityObject<ResourceLinkEntity>("Resource Links");
|
|
697
|
+
// if (await link.Load(item.ResourceLinkID))
|
|
698
|
+
// return await link.Delete();
|
|
699
|
+
// else
|
|
700
|
+
// return false;
|
|
701
|
+
// }
|
|
702
|
+
// else
|
|
703
|
+
// return false;
|
|
704
|
+
}
|
|
705
|
+
async doesFolderHaveChildren(folderID) {
|
|
706
|
+
if (!this.ResourceType.CategoryEntity) {
|
|
707
|
+
throw new Error("ResourceType.CategoryEntity is not set, cannot check for children");
|
|
708
|
+
}
|
|
709
|
+
const rv = new RunView();
|
|
710
|
+
const folderResult = await rv.RunView({
|
|
711
|
+
EntityName: this.ResourceType.CategoryEntity,
|
|
712
|
+
ExtraFilter: `ParentID ='${folderID}'`
|
|
737
713
|
});
|
|
714
|
+
if (!folderResult.Success) {
|
|
715
|
+
throw new Error(`Unable to fetch children for folder ${folderID}. Reason: ${folderResult.ErrorMessage}`);
|
|
716
|
+
}
|
|
717
|
+
return folderResult.Results.length > 0;
|
|
738
718
|
}
|
|
739
719
|
changeViewMode(mode) {
|
|
740
720
|
this.DisplayMode = mode;
|
|
@@ -777,14 +757,12 @@ export class ResourceBrowserComponent {
|
|
|
777
757
|
this.EditItemEvent.emit(event);
|
|
778
758
|
}
|
|
779
759
|
}
|
|
780
|
-
onDropdownItemClick(dropdownItem) {
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
dropdownItem.Action();
|
|
787
|
-
});
|
|
760
|
+
async onDropdownItemClick(dropdownItem) {
|
|
761
|
+
if (!dropdownItem || !dropdownItem.Action) {
|
|
762
|
+
LogError("Dropdown item or action is not set");
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
765
|
+
dropdownItem.Action();
|
|
788
766
|
}
|
|
789
767
|
toggleCopyFromView() {
|
|
790
768
|
this.copyFromDialogOpened = !this.copyFromDialogOpened;
|
|
@@ -818,53 +796,53 @@ export class ResourceBrowserComponent {
|
|
|
818
796
|
}
|
|
819
797
|
return "";
|
|
820
798
|
}
|
|
799
|
+
static ɵfac = function ResourceBrowserComponent_Factory(t) { return new (t || ResourceBrowserComponent)(i0.ɵɵdirectiveInject(i1.SharedService)); };
|
|
800
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceBrowserComponent, selectors: [["mj-resource-browser"]], inputs: { ResourceTypeName: "ResourceTypeName", EnableCategories: "EnableCategories", CategoryEntityID: "CategoryEntityID", CurrentCategoryID: "CurrentCategoryID", EnableItemEdit: "EnableItemEdit", EnableItemDelete: "EnableItemDelete", EnableRemoveLink: "EnableRemoveLink", Title: "Title", ItemFilter: "ItemFilter", OrderBy: "OrderBy", NewItemOptions: "NewItemOptions", DisplayMode: "DisplayMode" }, outputs: { ResourceSelected: "ResourceSelected", CategoryChanged: "CategoryChanged", DisplayModeChanged: "DisplayModeChanged", NavigateToParentEvent: "NavigateToParentEvent", EditItemEvent: "EditItemEvent", DeleteItemEvent: "DeleteItemEvent" }, decls: 25, vars: 8, consts: [["searchInput", ""], ["entityFormDialog", ""], [1, "generic-browser-list-container"], [1, "main-fav-wrapper"], [1, "title-wrapper"], [1, "title-flex-display"], ["textField", "Text", "themeColor", "info", 1, "custom-dropdwn", 3, "data"], [1, "search"], ["type", "text", "placeholder", "Search", "size", "large", "rounded", "large", "fillMode", "solid", 3, "keyup", "clearButton"], ["kendoTextBoxPrefixTemplate", "", 3, "showSeparator"], [1, "filter-wrapper"], ["kendobutton", "", 1, "cursor-pointer", "grid-btn", "btn-cmn", 3, "click"], [1, "fa-solid", "fa-bars"], ["kendobutton", "", 1, "cursor-pointer", "active", "btn-cmn", 3, "click"], [1, "fa-solid", "fa-table-cells-large"], [1, "main-area"], ["type", "converging-spinner"], ["class", "dialog-wrapper", "title", "Confirm", 3, "minWidth", "width", "close", 4, "ngIf"], ["class", "dialog-wrapper", 3, "title", "minWidth", "width", "close", 4, "ngIf"], ["Mode", "complete"], ["title", "Parent", 1, "title-folder", "fa-solid", "fa-arrow-left", "fa-2xl", "breadcrumb-icon", 3, "click"], ["title", "Folder", 1, "title-folder", "fa-regular", "fa-folder", "fa-2xl"], ["textField", "Text", "themeColor", "info", 1, "custom-dropdwn", 3, "itemClick", "data"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-magnifying-glass", "margin-left-small"], [3, "kendoGridBinding"], [1, "card-list", "k-d-flex", "k-flex-row", "k-h-full", "k-flex-wrap"], [3, "cellClick", "kendoGridBinding"], ["field", "Name", "title", "Name"], ["field", "Description", "title", "Description"], ["field", "Type", "title", "Type"], ["title", ""], ["kendoGridCellTemplate", ""], [1, "grid-wrapper"], [1, "list-btn"], ["title", "Remove Link to Shared Item", 1, "list-btn"], [1, "list-btn", 3, "click"], [1, "fa-regular", "fa-pen-to-square"], [1, "fa-regular", "fa-trash-can"], ["title", "Remove Link to Shared Item", 1, "list-btn", 3, "click"], [1, "fa-solid", "fa-link-slash", 2, "color", "rgb(19, 92, 201)"], [1, "card-wrapper", "cursor-pointer"], [1, "list-item-icon"], ["title", "Edit Item", 1, "list-btn"], ["title", "Delete Item", 1, "list-btn"], [3, "click"], [2, "color", "rgb(19, 92, 201)", 3, "title", "ngClass"], [3, "title", "ngClass"], [1, "padding-top-small"], ["kendoCardTitle", ""], ["kendoCardSubtitle", ""], ["title", "Edit Item", 1, "list-btn", 3, "click"], ["title", "Delete Item", 1, "list-btn", 3, "click"], ["title", "Confirm", 1, "dialog-wrapper", 3, "close", "minWidth", "width"], [1, "k-m-7.5", "k-text-center"], [1, "popup-actions-btn"], ["kendoButton", "", "themeColor", "info", 1, "cancel-btn", 3, "click"], ["kendoButton", "", "fillMode", "outline", "themeColor", "info", 1, "yes-btn", 3, "click"], [1, "dialog-wrapper", 3, "close", "title", "minWidth", "width"], ["text", "Name"], ["placeholder", "Enter a folder name", 3, "valueChange", "value"], ["text", "Description"], ["placeholder", "Enter a Description", 3, "valueChange", "value"], ["kendoButton", "", "themeColor", "info", 1, "cancel-btn"]], template: function ResourceBrowserComponent_Template(rf, ctx) { if (rf & 1) {
|
|
801
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
802
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4)(3, "div", 5);
|
|
803
|
+
i0.ɵɵtemplate(4, ResourceBrowserComponent_Conditional_4_Template, 2, 0);
|
|
804
|
+
i0.ɵɵelementStart(5, "h4");
|
|
805
|
+
i0.ɵɵtext(6);
|
|
806
|
+
i0.ɵɵelementEnd()();
|
|
807
|
+
i0.ɵɵtemplate(7, ResourceBrowserComponent_Conditional_7_Template, 3, 1, "kendo-dropdownbutton", 6);
|
|
808
|
+
i0.ɵɵelementEnd();
|
|
809
|
+
i0.ɵɵelementStart(8, "div", 4)(9, "div", 7)(10, "kendo-textbox", 8, 0);
|
|
810
|
+
i0.ɵɵlistener("keyup", function ResourceBrowserComponent_Template_kendo_textbox_keyup_10_listener() { i0.ɵɵrestoreView(_r1); const searchInput_r5 = i0.ɵɵreference(11); return i0.ɵɵresetView(ctx.onKeyup(searchInput_r5.value)); });
|
|
811
|
+
i0.ɵɵtemplate(12, ResourceBrowserComponent_ng_template_12_Template, 1, 0, "ng-template", 9);
|
|
812
|
+
i0.ɵɵelementEnd()();
|
|
813
|
+
i0.ɵɵelementStart(13, "div", 10)(14, "button", 11);
|
|
814
|
+
i0.ɵɵlistener("click", function ResourceBrowserComponent_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.changeViewMode("List")); });
|
|
815
|
+
i0.ɵɵelement(15, "span", 12);
|
|
816
|
+
i0.ɵɵelementEnd();
|
|
817
|
+
i0.ɵɵelementStart(16, "button", 13);
|
|
818
|
+
i0.ɵɵlistener("click", function ResourceBrowserComponent_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.changeViewMode("Tile")); });
|
|
819
|
+
i0.ɵɵelement(17, "span", 14);
|
|
820
|
+
i0.ɵɵelementEnd()()();
|
|
821
|
+
i0.ɵɵelementStart(18, "div", 15);
|
|
822
|
+
i0.ɵɵtemplate(19, ResourceBrowserComponent_Conditional_19_Template, 1, 0, "kendo-loader", 16)(20, ResourceBrowserComponent_Conditional_20_Template, 2, 1);
|
|
823
|
+
i0.ɵɵelementEnd()();
|
|
824
|
+
i0.ɵɵtemplate(21, ResourceBrowserComponent_kendo_dialog_21_Template, 10, 4, "kendo-dialog", 17)(22, ResourceBrowserComponent_kendo_dialog_22_Template, 13, 6, "kendo-dialog", 18);
|
|
825
|
+
i0.ɵɵelement(23, "mj-entity-form-dialog", 19, 1);
|
|
826
|
+
i0.ɵɵelementEnd();
|
|
827
|
+
} if (rf & 2) {
|
|
828
|
+
i0.ɵɵadvance(4);
|
|
829
|
+
i0.ɵɵconditional(ctx.CurrentCategoryID ? 4 : -1);
|
|
830
|
+
i0.ɵɵadvance(2);
|
|
831
|
+
i0.ɵɵtextInterpolate(ctx.Title);
|
|
832
|
+
i0.ɵɵadvance();
|
|
833
|
+
i0.ɵɵconditional(ctx.ItemOptions.length > 0 ? 7 : -1);
|
|
834
|
+
i0.ɵɵadvance(3);
|
|
835
|
+
i0.ɵɵproperty("clearButton", true);
|
|
836
|
+
i0.ɵɵadvance(2);
|
|
837
|
+
i0.ɵɵproperty("showSeparator", true);
|
|
838
|
+
i0.ɵɵadvance(7);
|
|
839
|
+
i0.ɵɵconditional(ctx.IsLoading ? 19 : 20);
|
|
840
|
+
i0.ɵɵadvance(2);
|
|
841
|
+
i0.ɵɵproperty("ngIf", ctx.deleteDialogOpened);
|
|
842
|
+
i0.ɵɵadvance();
|
|
843
|
+
i0.ɵɵproperty("ngIf", ctx.upsertFolderDialogVisible);
|
|
844
|
+
} }, dependencies: [i2.NgClass, i2.NgIf, i3.GridComponent, i3.DataBindingDirective, i3.ColumnComponent, i3.CellTemplateDirective, i4.DialogComponent, i4.DialogActionsComponent, i5.LoaderComponent, i6.ButtonComponent, i6.DropDownButtonComponent, i7.TextBoxComponent, i7.TextBoxPrefixTemplateDirective, i8.LabelComponent, i9.CardComponent, i9.CardBodyComponent, i9.CardTitleDirective, i9.CardSubtitleDirective, i10.EntityFormDialogComponent], styles: [".card-header-entity .title-wrap h1 {\n margin: 0 !important;\n font-size: 36px !important;\n line-height: 42px !important;\n color: var(--black) !important;\n}\n .card-header-entity .add-item .k-button {\n border: 1px solid var(--border-blue) !important;\n background: var(--white-color) !important;\n color: var(--border-blue);\n font-weight: 500 ;\n font-size: 16px ;\n border-radius: 10px;\n line-height: 34px;\n}\n .card-header-entity .add-item .k-button:hover {\n background: var(--border-blue) !important;\n color: var(--white-color);\n}\n .card-header-entity .add-item .k-button:hover .k-button-text svg path {\n fill: var(--white-color) !important;\n}\n .title-wrapper[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 0;\n border-bottom: 1px solid var(--med-gray);\n}\n .title-wrapper[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n line-height: 28px;\n }\n .main-fav-wrapper[_ngcontent-%COMP%] {\n background: #fff;\n padding: 20px;\n }\n .filter-wrapper[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-start;\n gap: 14px;\n align-items: center;\n}\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: transparent;\n border: none;\n box-sizing: border-box;\n padding-left: 40px;\n\n }\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] {\n background: var(--light-shade);\n width: 360px;\n height: 44px;\n position: relative;\n border-radius: 10px;\n }\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 12px;\n}\n .main-fav-wrapper .title-wrapper .k-dropdown-button .k-button {\n background: var(--border-blue);\n color: var(--white-color);\n font-size: 16px;\n border: none;\n padding: 8px 25px;\n border-radius: 10px;\n}\n .main-fav-wrapper .title-wrapper .k-dropdown-button .k-button .k-button-text, .card-header-entity .add-item .k-button .k-button-text {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.btn-cmn[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n min-width: 44px;\n background: transparent;\n border-radius: 8px;\n border: 1px solid var(--gray-color);\n}\n.btn-cmn.active[_ngcontent-%COMP%] {\n border: 1px solid var(--border-blue);\n}\n .main-fav-wrapper .title-wrapper .filter-wrapper .k-dropdown-button .k-button {\n border: 1px solid var(--gray-color);\n border-radius: 8px; padding: 10px 25px;\n background: var(--white-color);\n color: var(--sideNav);\n}\n .main-area .card-list .card-wrapper .k-card-body {\n padding: 16px !important;\n position: relative;\n}\n .main-fav-wrapper .main-area .card-list .card-wrapper .list-item-icon {\n position: absolute;\n display: flex;\n align-items: center;\n gap: 8px;\n top:12px;\n right: 12px;\n z-index: 9;\n}\n.grid-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n .main-fav-wrapper .main-area .card-list .card-wrapper .list-item-icon .common-btn, .list-btn[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n background: #000;\n min-width: 38px;\n border: 1px solid var(--gray-color);\n border-radius: 8px; \n display: flex;\n justify-content: center;\n align-items: center;\n background: transparent;\n cursor: pointer;\n}\n .main-fav-wrapper .main-area .card-list .card-wrapper .k-card-body .list-item-icon:hover, .list-btn[_ngcontent-%COMP%]:hover {\n border: 1px solid var(--border-active);\n}\n\n\n .main-area .card-list .card-wrapper:hover {\n box-shadow: 0px 0px 20px 0px rgba(60, 73, 99, 0.2);\n border: 1px solid var(--border-active);\n}\n .main-area .card-list .card-wrapper:hover .k-card-body .view-card-content-list h5 {\n color: var(--border-blue);\n}\n .main-area .card-list .card-wrapper .k-card-body .view-card-content-list p {\n color: var(--sideNav);\n font-size: 14px;\n line-height: 16px;\n height: auto;\n text-overflow: ellipsis;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n\n}\n .main-area .card-list .card-wrapper .k-card-body .view-card-content-list h5 {\n font-size: 18px;\n line-height: 21px;\n color: var(--text-darked);\n font-weight: 600;\n}\n.breadcrumb-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 0;\n}\n.breadcrumb-wrap[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 18px;\n font-weight: 400;\n color: var(--black);\n}\n .k-menu-popup {\n box-shadow: 0px 0px 20px 0px rgba(60, 73, 99, 0.2);\n border-radius: 10px;\n padding: 16px;\n}\n\n .k-menu-popup kendo-button-list ul li .k-menu-link {\n box-shadow: none !important;\n} \n .k-menu-popup kendo-button-list ul li .k-menu-link:active {\n background: transparent !important;\n}\n .k-menu-popup kendo-button-list ul li .k-menu-link .k-menu-link-text:hover {\n color: var(--primary-color);\n background: transparent !important;\n\n}\n .dialog-wrapper .popup-actions-btn button {\n flex: 1;\n}\n .dialog-wrapper .popup-actions-btn {\n display: flex;\n}\n .dialog-wrapper .popup-actions-btn .cancel-btn {\n background: var(--primary-color);\n color: var(--white-color);\n font-size: 16px;\n font-weight: 700;\n line-height: 34px;\n text-align: center;\n border-radius: 10px;\n border: 1px solid transparent;\n\n}\n .dialog-wrapper .popup-actions-btn .yes-btn {\n border:1px solid var(--primary-color);\n background: transparent;\n color: var(--primary-color);\n font-size: 16px;\n font-weight: 700;\n line-height: 34px;\n text-align: center;\n border-radius: 10px;\n box-shadow: none;\n}\n .dialog-wrapper .popup-actions-btn .yes-btn:focus {\n box-shadow: none !important;\n}\n .dialog-wrapper .k-window-title {\n font-size: 30px;\n font-weight: 500;\n line-height: 36px;\n text-align: left;\n color: var(--text-darked);\n}\n .dialog-wrapper p {\n font-size: 16px;\n font-weight: 500;\n line-height: 20px;\n text-align: left;\n color: var(--black);\n}\n\n.margin-left-small[_ngcontent-%COMP%] {\n margin-left: 10px;\n}\n\n.card-wrapper[_ngcontent-%COMP%] {\n min-width: 230px;\n height: 150px;\n min-height: 125px;\n}\n\n.padding-top-small[_ngcontent-%COMP%] {\n padding-top: 10px;\n}\n\n.cursor-pointer[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.title-folder[_ngcontent-%COMP%] {\n padding-right: 20px;\n margin: auto;\n}\n\n.title-flex-display[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n\n.breadcrumb-icon[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n.breacrumb-icon[_ngcontent-%COMP%]:hover {\n color: var(--primary-color);\n}", ".main-area[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n gap: 24px;\n padding: 24px 0;\n}\n.list-view[_ngcontent-%COMP%] {\n padding: 16px;\n min-width: 300px;\n border-radius: 4px;\n background: #FAFAFA;\n border: none;\n}\n .list-view .k-listview-header, \n .list-view .k-listview-footer {\n border: none;\n}\n .list-view .k-listview-content {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 4px;\n background: #fff;\n padding: 16px;\n}\n\n.header[_ngcontent-%COMP%], \n.footer[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 16px;\n height: auto;\n margin:0;\n}\n\n.header[_ngcontent-%COMP%] {\n color: #424242;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.header[_ngcontent-%COMP%] .head-tag[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\nfont-size: 16px;\nfont-style: normal;\nfont-weight: 400;\nline-height: 20px;\n}\n\n.header[_ngcontent-%COMP%] .count[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n min-width: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 10px;\n background: rgba(0, 0, 0, 0.08);\n border-radius: 50%;\n}\n.footer[_ngcontent-%COMP%] {\n font-size: 14px;\n margin-top: 16px;\n}\n\n.list-item[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 30px;\n cursor: pointer;\n margin: 4px;\n}\n.card-container[_ngcontent-%COMP%] {\n margin: 0;\n padding: 0;\n box-shadow: none;\n}\n.card-header-entity[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n\n\n\n\n \n.view-card[_ngcontent-%COMP%] .view-icon[_ngcontent-%COMP%] {\n color: var(--sideNav);\n}\n.card-wrapper[_ngcontent-%COMP%] {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 6px;\n width: 100% !important;\n}\n.card-wrapper[_ngcontent-%COMP%] .k-card-body[_ngcontent-%COMP%] {\n background: #fff;\n padding: 12px 20px;\n}\n.card-wrapper[_ngcontent-%COMP%] .view-card[_ngcontent-%COMP%] {\n overflow: auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: #fafafa;\n padding: 4px 15px;\n}\n.view-card[_ngcontent-%COMP%] .btn-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.k-card-body[_ngcontent-%COMP%] .view-card-content[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n margin-bottom: 0;\n letter-spacing: 0.18px;\n}\n.k-card-body[_ngcontent-%COMP%] .view-card-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #666;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n height: 48px;\n margin-bottom: 0;\n}\n.card-container[_ngcontent-%COMP%] {\n padding: 0;\n margin: 0;\n box-shadow: none;\n}\n.card-header-entity[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n.main-area[_ngcontent-%COMP%] .card-list[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 20px;\n}"] });
|
|
821
845
|
}
|
|
822
|
-
ResourceBrowserComponent.ɵfac = function ResourceBrowserComponent_Factory(t) { return new (t || ResourceBrowserComponent)(i0.ɵɵdirectiveInject(i1.SharedService)); };
|
|
823
|
-
ResourceBrowserComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceBrowserComponent, selectors: [["mj-resource-browser"]], inputs: { ResourceTypeName: "ResourceTypeName", EnableCategories: "EnableCategories", CategoryEntityID: "CategoryEntityID", CurrentCategoryID: "CurrentCategoryID", EnableItemEdit: "EnableItemEdit", EnableItemDelete: "EnableItemDelete", EnableRemoveLink: "EnableRemoveLink", Title: "Title", ItemFilter: "ItemFilter", OrderBy: "OrderBy", NewItemOptions: "NewItemOptions", DisplayMode: "DisplayMode" }, outputs: { ResourceSelected: "ResourceSelected", CategoryChanged: "CategoryChanged", DisplayModeChanged: "DisplayModeChanged", NavigateToParentEvent: "NavigateToParentEvent", EditItemEvent: "EditItemEvent", DeleteItemEvent: "DeleteItemEvent" }, decls: 25, vars: 8, consts: [["searchInput", ""], ["entityFormDialog", ""], [1, "generic-browser-list-container"], [1, "main-fav-wrapper"], [1, "title-wrapper"], [1, "title-flex-display"], ["textField", "Text", "themeColor", "info", 1, "custom-dropdwn", 3, "data"], [1, "search"], ["type", "text", "placeholder", "Search", "size", "large", "rounded", "large", "fillMode", "solid", 3, "keyup", "clearButton"], ["kendoTextBoxPrefixTemplate", "", 3, "showSeparator"], [1, "filter-wrapper"], ["kendobutton", "", 1, "cursor-pointer", "grid-btn", "btn-cmn", 3, "click"], [1, "fa-solid", "fa-bars"], ["kendobutton", "", 1, "cursor-pointer", "active", "btn-cmn", 3, "click"], [1, "fa-solid", "fa-table-cells-large"], [1, "main-area"], ["type", "converging-spinner"], ["class", "dialog-wrapper", "title", "Confirm", 3, "minWidth", "width", "close", 4, "ngIf"], ["class", "dialog-wrapper", 3, "title", "minWidth", "width", "close", 4, "ngIf"], ["Mode", "complete"], ["title", "Parent", 1, "title-folder", "fa-solid", "fa-arrow-left", "fa-2xl", "breadcrumb-icon", 3, "click"], ["title", "Folder", 1, "title-folder", "fa-regular", "fa-folder", "fa-2xl"], ["textField", "Text", "themeColor", "info", 1, "custom-dropdwn", 3, "itemClick", "data"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-magnifying-glass", "margin-left-small"], [3, "kendoGridBinding"], [1, "card-list", "k-d-flex", "k-flex-row", "k-h-full", "k-flex-wrap"], [3, "cellClick", "kendoGridBinding"], ["field", "Name", "title", "Name"], ["field", "Description", "title", "Description"], ["field", "Type", "title", "Type"], ["title", ""], ["kendoGridCellTemplate", ""], [1, "grid-wrapper"], [1, "list-btn"], ["title", "Remove Link to Shared Item", 1, "list-btn"], [1, "list-btn", 3, "click"], [1, "fa-regular", "fa-pen-to-square"], [1, "fa-regular", "fa-trash-can"], ["title", "Remove Link to Shared Item", 1, "list-btn", 3, "click"], [1, "fa-solid", "fa-link-slash", 2, "color", "rgb(19, 92, 201)"], [1, "card-wrapper", "cursor-pointer"], [1, "list-item-icon"], ["title", "Edit Item", 1, "list-btn"], ["title", "Delete Item", 1, "list-btn"], [3, "click"], [2, "color", "rgb(19, 92, 201)", 3, "title", "ngClass"], [3, "title", "ngClass"], [1, "padding-top-small"], ["kendoCardTitle", ""], ["kendoCardSubtitle", ""], ["title", "Edit Item", 1, "list-btn", 3, "click"], ["title", "Delete Item", 1, "list-btn", 3, "click"], ["title", "Confirm", 1, "dialog-wrapper", 3, "close", "minWidth", "width"], [1, "k-m-7.5", "k-text-center"], [1, "popup-actions-btn"], ["kendoButton", "", "themeColor", "info", 1, "cancel-btn", 3, "click"], ["kendoButton", "", "fillMode", "outline", "themeColor", "info", 1, "yes-btn", 3, "click"], [1, "dialog-wrapper", 3, "close", "title", "minWidth", "width"], ["text", "Name"], ["placeholder", "Enter a folder name", 3, "valueChange", "value"], ["text", "Description"], ["placeholder", "Enter a Description", 3, "valueChange", "value"], ["kendoButton", "", "themeColor", "info", 1, "cancel-btn"]], template: function ResourceBrowserComponent_Template(rf, ctx) { if (rf & 1) {
|
|
824
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
825
|
-
i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4)(3, "div", 5);
|
|
826
|
-
i0.ɵɵtemplate(4, ResourceBrowserComponent_Conditional_4_Template, 2, 0);
|
|
827
|
-
i0.ɵɵelementStart(5, "h4");
|
|
828
|
-
i0.ɵɵtext(6);
|
|
829
|
-
i0.ɵɵelementEnd()();
|
|
830
|
-
i0.ɵɵtemplate(7, ResourceBrowserComponent_Conditional_7_Template, 3, 1, "kendo-dropdownbutton", 6);
|
|
831
|
-
i0.ɵɵelementEnd();
|
|
832
|
-
i0.ɵɵelementStart(8, "div", 4)(9, "div", 7)(10, "kendo-textbox", 8, 0);
|
|
833
|
-
i0.ɵɵlistener("keyup", function ResourceBrowserComponent_Template_kendo_textbox_keyup_10_listener() { i0.ɵɵrestoreView(_r1); const searchInput_r5 = i0.ɵɵreference(11); return i0.ɵɵresetView(ctx.onKeyup(searchInput_r5.value)); });
|
|
834
|
-
i0.ɵɵtemplate(12, ResourceBrowserComponent_ng_template_12_Template, 1, 0, "ng-template", 9);
|
|
835
|
-
i0.ɵɵelementEnd()();
|
|
836
|
-
i0.ɵɵelementStart(13, "div", 10)(14, "button", 11);
|
|
837
|
-
i0.ɵɵlistener("click", function ResourceBrowserComponent_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.changeViewMode("List")); });
|
|
838
|
-
i0.ɵɵelement(15, "span", 12);
|
|
839
|
-
i0.ɵɵelementEnd();
|
|
840
|
-
i0.ɵɵelementStart(16, "button", 13);
|
|
841
|
-
i0.ɵɵlistener("click", function ResourceBrowserComponent_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.changeViewMode("Tile")); });
|
|
842
|
-
i0.ɵɵelement(17, "span", 14);
|
|
843
|
-
i0.ɵɵelementEnd()()();
|
|
844
|
-
i0.ɵɵelementStart(18, "div", 15);
|
|
845
|
-
i0.ɵɵtemplate(19, ResourceBrowserComponent_Conditional_19_Template, 1, 0, "kendo-loader", 16)(20, ResourceBrowserComponent_Conditional_20_Template, 2, 1);
|
|
846
|
-
i0.ɵɵelementEnd()();
|
|
847
|
-
i0.ɵɵtemplate(21, ResourceBrowserComponent_kendo_dialog_21_Template, 10, 4, "kendo-dialog", 17)(22, ResourceBrowserComponent_kendo_dialog_22_Template, 13, 6, "kendo-dialog", 18);
|
|
848
|
-
i0.ɵɵelement(23, "mj-entity-form-dialog", 19, 1);
|
|
849
|
-
i0.ɵɵelementEnd();
|
|
850
|
-
} if (rf & 2) {
|
|
851
|
-
i0.ɵɵadvance(4);
|
|
852
|
-
i0.ɵɵconditional(ctx.CurrentCategoryID ? 4 : -1);
|
|
853
|
-
i0.ɵɵadvance(2);
|
|
854
|
-
i0.ɵɵtextInterpolate(ctx.Title);
|
|
855
|
-
i0.ɵɵadvance();
|
|
856
|
-
i0.ɵɵconditional(ctx.ItemOptions.length > 0 ? 7 : -1);
|
|
857
|
-
i0.ɵɵadvance(3);
|
|
858
|
-
i0.ɵɵproperty("clearButton", true);
|
|
859
|
-
i0.ɵɵadvance(2);
|
|
860
|
-
i0.ɵɵproperty("showSeparator", true);
|
|
861
|
-
i0.ɵɵadvance(7);
|
|
862
|
-
i0.ɵɵconditional(ctx.IsLoading ? 19 : 20);
|
|
863
|
-
i0.ɵɵadvance(2);
|
|
864
|
-
i0.ɵɵproperty("ngIf", ctx.deleteDialogOpened);
|
|
865
|
-
i0.ɵɵadvance();
|
|
866
|
-
i0.ɵɵproperty("ngIf", ctx.upsertFolderDialogVisible);
|
|
867
|
-
} }, dependencies: [i2.NgClass, i2.NgIf, i3.GridComponent, i3.DataBindingDirective, i3.ColumnComponent, i3.CellTemplateDirective, i4.DialogComponent, i4.DialogActionsComponent, i5.LoaderComponent, i6.ButtonComponent, i6.DropDownButtonComponent, i7.TextBoxComponent, i7.TextBoxPrefixTemplateDirective, i8.LabelComponent, i9.CardComponent, i9.CardBodyComponent, i9.CardTitleDirective, i9.CardSubtitleDirective, i10.EntityFormDialogComponent], styles: [".card-header-entity .title-wrap h1 {\n margin: 0 !important;\n font-size: 36px !important;\n line-height: 42px !important;\n color: var(--black) !important;\n}\n .card-header-entity .add-item .k-button {\n border: 1px solid var(--border-blue) !important;\n background: var(--white-color) !important;\n color: var(--border-blue);\n font-weight: 500 ;\n font-size: 16px ;\n border-radius: 10px;\n line-height: 34px;\n}\n .card-header-entity .add-item .k-button:hover {\n background: var(--border-blue) !important;\n color: var(--white-color);\n}\n .card-header-entity .add-item .k-button:hover .k-button-text svg path {\n fill: var(--white-color) !important;\n}\n .title-wrapper[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 0;\n border-bottom: 1px solid var(--med-gray);\n}\n .title-wrapper[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n line-height: 28px;\n }\n .main-fav-wrapper[_ngcontent-%COMP%] {\n background: #fff;\n padding: 20px;\n }\n .filter-wrapper[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-start;\n gap: 14px;\n align-items: center;\n}\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: transparent;\n border: none;\n box-sizing: border-box;\n padding-left: 40px;\n\n }\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] {\n background: var(--light-shade);\n width: 360px;\n height: 44px;\n position: relative;\n border-radius: 10px;\n }\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 12px;\n}\n .main-fav-wrapper .title-wrapper .k-dropdown-button .k-button {\n background: var(--border-blue);\n color: var(--white-color);\n font-size: 16px;\n border: none;\n padding: 8px 25px;\n border-radius: 10px;\n}\n .main-fav-wrapper .title-wrapper .k-dropdown-button .k-button .k-button-text, .card-header-entity .add-item .k-button .k-button-text {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.btn-cmn[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n min-width: 44px;\n background: transparent;\n border-radius: 8px;\n border: 1px solid var(--gray-color);\n}\n.btn-cmn.active[_ngcontent-%COMP%] {\n border: 1px solid var(--border-blue);\n}\n .main-fav-wrapper .title-wrapper .filter-wrapper .k-dropdown-button .k-button {\n border: 1px solid var(--gray-color);\n border-radius: 8px; padding: 10px 25px;\n background: var(--white-color);\n color: var(--sideNav);\n}\n .main-area .card-list .card-wrapper .k-card-body {\n padding: 16px !important;\n position: relative;\n}\n .main-fav-wrapper .main-area .card-list .card-wrapper .list-item-icon {\n position: absolute;\n display: flex;\n align-items: center;\n gap: 8px;\n top:12px;\n right: 12px;\n z-index: 9;\n}\n.grid-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n .main-fav-wrapper .main-area .card-list .card-wrapper .list-item-icon .common-btn, .list-btn[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n background: #000;\n min-width: 38px;\n border: 1px solid var(--gray-color);\n border-radius: 8px; \n display: flex;\n justify-content: center;\n align-items: center;\n background: transparent;\n cursor: pointer;\n}\n .main-fav-wrapper .main-area .card-list .card-wrapper .k-card-body .list-item-icon:hover, .list-btn[_ngcontent-%COMP%]:hover {\n border: 1px solid var(--border-active);\n}\n\n\n .main-area .card-list .card-wrapper:hover {\n box-shadow: 0px 0px 20px 0px rgba(60, 73, 99, 0.2);\n border: 1px solid var(--border-active);\n}\n .main-area .card-list .card-wrapper:hover .k-card-body .view-card-content-list h5 {\n color: var(--border-blue);\n}\n .main-area .card-list .card-wrapper .k-card-body .view-card-content-list p {\n color: var(--sideNav);\n font-size: 14px;\n line-height: 16px;\n height: auto;\n text-overflow: ellipsis;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n\n}\n .main-area .card-list .card-wrapper .k-card-body .view-card-content-list h5 {\n font-size: 18px;\n line-height: 21px;\n color: var(--text-darked);\n font-weight: 600;\n}\n.breadcrumb-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 0;\n}\n.breadcrumb-wrap[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 18px;\n font-weight: 400;\n color: var(--black);\n}\n .k-menu-popup {\n box-shadow: 0px 0px 20px 0px rgba(60, 73, 99, 0.2);\n border-radius: 10px;\n padding: 16px;\n}\n\n .k-menu-popup kendo-button-list ul li .k-menu-link {\n box-shadow: none !important;\n} \n .k-menu-popup kendo-button-list ul li .k-menu-link:active {\n background: transparent !important;\n}\n .k-menu-popup kendo-button-list ul li .k-menu-link .k-menu-link-text:hover {\n color: var(--primary-color);\n background: transparent !important;\n\n}\n .dialog-wrapper .popup-actions-btn button {\n flex: 1;\n}\n .dialog-wrapper .popup-actions-btn {\n display: flex;\n}\n .dialog-wrapper .popup-actions-btn .cancel-btn {\n background: var(--primary-color);\n color: var(--white-color);\n font-size: 16px;\n font-weight: 700;\n line-height: 34px;\n text-align: center;\n border-radius: 10px;\n border: 1px solid transparent;\n\n}\n .dialog-wrapper .popup-actions-btn .yes-btn {\n border:1px solid var(--primary-color);\n background: transparent;\n color: var(--primary-color);\n font-size: 16px;\n font-weight: 700;\n line-height: 34px;\n text-align: center;\n border-radius: 10px;\n box-shadow: none;\n}\n .dialog-wrapper .popup-actions-btn .yes-btn:focus {\n box-shadow: none !important;\n}\n .dialog-wrapper .k-window-title {\n font-size: 30px;\n font-weight: 500;\n line-height: 36px;\n text-align: left;\n color: var(--text-darked);\n}\n .dialog-wrapper p {\n font-size: 16px;\n font-weight: 500;\n line-height: 20px;\n text-align: left;\n color: var(--black);\n}\n\n.margin-left-small[_ngcontent-%COMP%] {\n margin-left: 10px;\n}\n\n.card-wrapper[_ngcontent-%COMP%] {\n min-width: 230px;\n height: 150px;\n min-height: 125px;\n}\n\n.padding-top-small[_ngcontent-%COMP%] {\n padding-top: 10px;\n}\n\n.cursor-pointer[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.title-folder[_ngcontent-%COMP%] {\n padding-right: 20px;\n margin: auto;\n}\n\n.title-flex-display[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n\n.breadcrumb-icon[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n.breacrumb-icon[_ngcontent-%COMP%]:hover {\n color: var(--primary-color);\n}", ".main-area[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n gap: 24px;\n padding: 24px 0;\n}\n.list-view[_ngcontent-%COMP%] {\n padding: 16px;\n min-width: 300px;\n border-radius: 4px;\n background: #FAFAFA;\n border: none;\n}\n .list-view .k-listview-header, \n .list-view .k-listview-footer {\n border: none;\n}\n .list-view .k-listview-content {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 4px;\n background: #fff;\n padding: 16px;\n}\n\n.header[_ngcontent-%COMP%], \n.footer[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 16px;\n height: auto;\n margin:0;\n}\n\n.header[_ngcontent-%COMP%] {\n color: #424242;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.header[_ngcontent-%COMP%] .head-tag[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\nfont-size: 16px;\nfont-style: normal;\nfont-weight: 400;\nline-height: 20px;\n}\n\n.header[_ngcontent-%COMP%] .count[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n min-width: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 10px;\n background: rgba(0, 0, 0, 0.08);\n border-radius: 50%;\n}\n.footer[_ngcontent-%COMP%] {\n font-size: 14px;\n margin-top: 16px;\n}\n\n.list-item[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 30px;\n cursor: pointer;\n margin: 4px;\n}\n.card-container[_ngcontent-%COMP%] {\n margin: 0;\n padding: 0;\n box-shadow: none;\n}\n.card-header-entity[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n\n\n\n\n \n.view-card[_ngcontent-%COMP%] .view-icon[_ngcontent-%COMP%] {\n color: var(--sideNav);\n}\n.card-wrapper[_ngcontent-%COMP%] {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 6px;\n width: 100% !important;\n}\n.card-wrapper[_ngcontent-%COMP%] .k-card-body[_ngcontent-%COMP%] {\n background: #fff;\n padding: 12px 20px;\n}\n.card-wrapper[_ngcontent-%COMP%] .view-card[_ngcontent-%COMP%] {\n overflow: auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: #fafafa;\n padding: 4px 15px;\n}\n.view-card[_ngcontent-%COMP%] .btn-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.k-card-body[_ngcontent-%COMP%] .view-card-content[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n margin-bottom: 0;\n letter-spacing: 0.18px;\n}\n.k-card-body[_ngcontent-%COMP%] .view-card-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #666;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n height: 48px;\n margin-bottom: 0;\n}\n.card-container[_ngcontent-%COMP%] {\n padding: 0;\n margin: 0;\n box-shadow: none;\n}\n.card-header-entity[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n.main-area[_ngcontent-%COMP%] .card-list[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 20px;\n}"] });
|
|
868
846
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceBrowserComponent, [{
|
|
869
847
|
type: Component,
|
|
870
848
|
args: [{ selector: 'mj-resource-browser', template: "\n<div class=\"generic-browser-list-container\">\n <div class=\"main-fav-wrapper\">\n <div class=\"title-wrapper\">\n <div class=\"title-flex-display\">\n @if(CurrentCategoryID){\n <span title=\"Parent\" class=\"title-folder fa-solid fa-arrow-left fa-2xl breadcrumb-icon\" (click)=\"goToParent()\"></span> \n <span title=\"Folder\" class=\"title-folder fa-regular fa-folder fa-2xl\"></span>\n }\n <h4>{{Title}}</h4>\n </div>\n @if(ItemOptions.length > 0){\n <kendo-dropdownbutton \n class=\"custom-dropdwn\" \n (itemClick)=\"onDropdownItemClick($event)\" \n [data]=\"ItemOptions\" \n textField=\"Text\"\n themeColor=\"info\">\n <span class=\"fa-solid fa-plus\"></span>\n Create New\n </kendo-dropdownbutton> \n }\n </div>\n <div class=\"title-wrapper\">\n <div class=\"search\">\n <kendo-textbox \n type=\"text\" \n #searchInput \n placeholder=\"Search\" \n (keyup)=\"onKeyup(searchInput.value)\"\n [clearButton]=\"true\"\n size=\"large\"\n rounded=\"large\"\n fillMode=\"solid\"\n >\n <ng-template kendoTextBoxPrefixTemplate [showSeparator]=\"true\">\n <span class=\"fa-solid fa-magnifying-glass margin-left-small\"></span>\n </ng-template>\n </kendo-textbox>\n </div>\n <div class=\"filter-wrapper\">\n <!--\n <kendo-dropdownbutton [data]=\"data\" themeColor=\"primary\">\n Sort By Recents\n </kendo-dropdownbutton>\n -->\n <button kendobutton (click)=\"changeViewMode('List')\" class=\"cursor-pointer grid-btn btn-cmn\">\n <span class=\"fa-solid fa-bars\"></span>\n </button>\n <button kendobutton (click)=\"changeViewMode('Tile')\" class=\"cursor-pointer active btn-cmn\">\n <span class=\"fa-solid fa-table-cells-large\"></span>\n </button>\n </div>\n </div>\n\n <div class=\"main-area\">\n @if (IsLoading) {\n <kendo-loader type=\"converging-spinner\"></kendo-loader>\n }\n @else {\n @if(DisplayMode === 'List'){\n <kendo-grid (cellClick)=\"onCellItemClicked($event)\" [kendoGridBinding]=\"Items\">\n <kendo-grid-column field=\"Name\" title=\"Name\"></kendo-grid-column>\n <kendo-grid-column field=\"Description\" title=\"Description\"></kendo-grid-column>\n <kendo-grid-column field=\"Type\" title=\"Type\"></kendo-grid-column>\n <kendo-grid-column title=\"\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <div class=\"grid-wrapper\">\n @if(EnableItemEdit && (!dataItem.IsLink || dataItem.LinkPermissionLevel === 'Owner' || dataItem.LinkPermissionLevel === 'Edit')) {\n <button class=\"list-btn\" (click)=\"editItem(dataItem)\">\n <span class=\"fa-regular fa-pen-to-square\"></span>\n </button>\n }\n @if(EnableItemDelete && (!dataItem.IsLike || dataItem.LinkPermissionLevel === 'Owner')) {\n <button class=\"list-btn\" (click)=\"deleteItem(dataItem)\">\n <span class=\"fa-regular fa-trash-can\"></span>\n </button> \n }\n @if(EnableRemoveLink && dataItem.IsLink) {\n <button (click)=\"unlinkItem(dataItem)\" class=\"list-btn\" title=\"Remove Link to Shared Item\" >\n <span class=\"fa-solid fa-link-slash\" style=\"color: rgb(19, 92, 201);\"></span>\n </button> \n }\n </div>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n }\n @else {\n <div class=\"card-list k-d-flex k-flex-row k-h-full k-flex-wrap\">\n @for(item of Items; track item) {\n <kendo-card class=\"card-wrapper cursor-pointer\">\n <div class=\"list-item-icon\">\n @if(EnableItemEdit && (!item.IsLink || item.LinkPermissionLevel === 'Owner' || item.LinkPermissionLevel === 'Edit')) {\n <button (click)=\"editItem(item)\" class=\"list-btn\" title=\"Edit Item\">\n <span class=\"fa-regular fa-pen-to-square\"></span>\n </button>\n }\n @if(EnableItemDelete && (!item.IsLink || item.LinkPermissionLevel === 'Owner') ) {\n <button (click)=\"deleteItem(item)\" class=\"list-btn\" title=\"Delete Item\">\n <span class=\"fa-regular fa-trash-can\"></span>\n </button> \n }\n @else if (EnableRemoveLink && item.IsLink) {\n <button (click)=\"unlinkItem(item)\" class=\"list-btn\" title=\"Remove Link to Shared Item\" >\n <span class=\"fa-solid fa-link-slash\" style=\"color: rgb(19, 92, 201);\"></span>\n </button> \n }\n </div>\n <kendo-card-body (click)=\"itemClick(item)\">\n @if(item.IsLink) {\n <i [title]=\"item.Name + '(Shared)'\" [ngClass]=\"getIconForResourceType(item)\" style=\"color: rgb(19, 92, 201);\"></i>\n }\n @else {\n <span [title]=\"item.Name\" [ngClass]=\"getIconForResourceType(item)\"></span>\n }\n <div class=\"padding-top-small\">\n <h5 kendoCardTitle>{{ item.Name }}</h5>\n <p kendoCardSubtitle>{{ item.Description }}</p>\n </div>\n </kendo-card-body>\n </kendo-card>\n }\n </div>\n }\n }\n </div>\n </div>\n\n <kendo-dialog \n [minWidth]=\"450\"\n [width]=\"650\"\n class=\"dialog-wrapper\" \n title=\"Confirm\" \n *ngIf=\"deleteDialogOpened\" \n (close)=\"onConfirmDeleteItem(false)\">\n <p class=\"k-m-7.5 k-text-center\">\n Are you sure you want to {{(selectedItem?.IsLink && selectedItem?.LinkPermissionLevel === 'Owner') || !selectedItem?.IsLink ? 'delete' : 'unlink'}} <b>{{selectedItem?.Name}}?</b>\n </p>\n <kendo-dialog-actions class=\"popup-actions-btn\">\n <button class=\"cancel-btn\" (click)=\"onConfirmDeleteItem(true)\" kendoButton themeColor=\"info\">\n Yes\n </button>\n <button class=\"yes-btn\" (click)=\"onConfirmDeleteItem(false)\" kendoButton fillMode=\"outline\" themeColor=\"info\">\n No \n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n\n <kendo-dialog \n [title]=\"selectedFolder ? 'Edit Folder' : 'Create new folder'\" \n *ngIf=\"upsertFolderDialogVisible\" \n (close)=\"toggleUpsertFolderView(false, false)\"\n [minWidth]=\"250\"\n [width]=\"450\"\n class=\"dialog-wrapper\"\n >\n <div class=\"search\">\n <kendo-label text=\"Name\">\n <kendo-textbox [value]=\"upsertNewFolderName\" placeholder=\"Enter a folder name\" (valueChange)=\"onUpsertFolderNameKeyup($event)\"/>\n </kendo-label>\n </div>\n <br>\n <div class=\"search\">\n <kendo-label text=\"Description\">\n <kendo-textbox [value]=\"upsertNewFolderDescription\" placeholder=\"Enter a Description\" (valueChange)=\"onUpsertFolderDescriptionKeyup($event)\"/>\n </kendo-label>\n </div>\n <kendo-dialog-actions class=\"popup-actions-btn\">\n @if(selectedFolder){\n <button class=\"cancel-btn\" (click)=\"updateFolder()\" kendoButton themeColor=\"info\">\n Update\n </button>\n }\n @else {\n <button class=\"cancel-btn\" (click)=\"createFolder()\" kendoButton themeColor=\"info\">\n Create\n </button>\n }\n <button class=\"yes-btn\" (click)=\"toggleUpsertFolderView(false, false)\" kendoButton fillMode=\"outline\" themeColor=\"info\">\n Cancel\n </button>\n </kendo-dialog-actions>\n </kendo-dialog>\n <mj-entity-form-dialog\n #entityFormDialog\n Mode=\"complete\"\n >\n </mj-entity-form-dialog>\n</div>\n", styles: ["::ng-deep .card-header-entity .title-wrap h1 {\n margin: 0 !important;\n font-size: 36px !important;\n line-height: 42px !important;\n color: var(--black) !important;\n}\n ::ng-deep .card-header-entity .add-item .k-button {\n border: 1px solid var(--border-blue) !important;\n background: var(--white-color) !important;\n color: var(--border-blue);\n font-weight: 500 ;\n font-size: 16px ;\n border-radius: 10px;\n line-height: 34px;\n}\n::ng-deep .card-header-entity .add-item .k-button:hover {\n background: var(--border-blue) !important;\n color: var(--white-color);\n}\n::ng-deep .card-header-entity .add-item .k-button:hover .k-button-text svg path {\n fill: var(--white-color) !important;\n}\n .title-wrapper {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 0;\n border-bottom: 1px solid var(--med-gray);\n}\n .title-wrapper h4 {\n margin: 0;\n font-size: 24px;\n line-height: 28px;\n }\n .main-fav-wrapper {\n background: #fff;\n padding: 20px;\n }\n .filter-wrapper {\n display: flex;\n justify-content: flex-start;\n gap: 14px;\n align-items: center;\n}\n .title-wrapper .search input {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: transparent;\n border: none;\n box-sizing: border-box;\n padding-left: 40px;\n\n }\n .title-wrapper .search {\n background: var(--light-shade);\n width: 360px;\n height: 44px;\n position: relative;\n border-radius: 10px;\n }\n .title-wrapper .search svg {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 12px;\n}\n::ng-deep .main-fav-wrapper .title-wrapper .k-dropdown-button .k-button {\n background: var(--border-blue);\n color: var(--white-color);\n font-size: 16px;\n border: none;\n padding: 8px 25px;\n border-radius: 10px;\n}\n::ng-deep .main-fav-wrapper .title-wrapper .k-dropdown-button .k-button .k-button-text, ::ng-deep .card-header-entity .add-item .k-button .k-button-text {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.btn-cmn {\n width: 44px;\n height: 44px;\n min-width: 44px;\n background: transparent;\n border-radius: 8px;\n border: 1px solid var(--gray-color);\n}\n.btn-cmn.active {\n border: 1px solid var(--border-blue);\n}\n::ng-deep .main-fav-wrapper .title-wrapper .filter-wrapper .k-dropdown-button .k-button {\n border: 1px solid var(--gray-color);\n border-radius: 8px; padding: 10px 25px;\n background: var(--white-color);\n color: var(--sideNav);\n}\n::ng-deep .main-area .card-list .card-wrapper .k-card-body {\n padding: 16px !important;\n position: relative;\n}\n::ng-deep .main-fav-wrapper .main-area .card-list .card-wrapper .list-item-icon {\n position: absolute;\n display: flex;\n align-items: center;\n gap: 8px;\n top:12px;\n right: 12px;\n z-index: 9;\n}\n.grid-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n::ng-deep .main-fav-wrapper .main-area .card-list .card-wrapper .list-item-icon .common-btn, .list-btn {\n width: 38px;\n height: 38px;\n background: #000;\n min-width: 38px;\n border: 1px solid var(--gray-color);\n border-radius: 8px; \n display: flex;\n justify-content: center;\n align-items: center;\n background: transparent;\n cursor: pointer;\n}\n::ng-deep .main-fav-wrapper .main-area .card-list .card-wrapper .k-card-body .list-item-icon:hover, .list-btn:hover {\n border: 1px solid var(--border-active);\n}\n\n\n::ng-deep .main-area .card-list .card-wrapper:hover {\n box-shadow: 0px 0px 20px 0px rgba(60, 73, 99, 0.2);\n border: 1px solid var(--border-active);\n}\n::ng-deep .main-area .card-list .card-wrapper:hover .k-card-body .view-card-content-list h5 {\n color: var(--border-blue);\n}\n::ng-deep .main-area .card-list .card-wrapper .k-card-body .view-card-content-list p {\n color: var(--sideNav);\n font-size: 14px;\n line-height: 16px;\n height: auto;\n text-overflow: ellipsis;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n\n}\n::ng-deep .main-area .card-list .card-wrapper .k-card-body .view-card-content-list h5 {\n font-size: 18px;\n line-height: 21px;\n color: var(--text-darked);\n font-weight: 600;\n}\n.breadcrumb-wrap {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 0;\n}\n.breadcrumb-wrap span {\n font-size: 16px;\n line-height: 18px;\n font-weight: 400;\n color: var(--black);\n}\n::ng-deep .k-menu-popup {\n box-shadow: 0px 0px 20px 0px rgba(60, 73, 99, 0.2);\n border-radius: 10px;\n padding: 16px;\n}\n\n::ng-deep .k-menu-popup kendo-button-list ul li .k-menu-link {\n box-shadow: none !important;\n} \n::ng-deep .k-menu-popup kendo-button-list ul li .k-menu-link:active {\n background: transparent !important;\n}\n::ng-deep .k-menu-popup kendo-button-list ul li .k-menu-link .k-menu-link-text:hover {\n color: var(--primary-color);\n background: transparent !important;\n\n}\n::ng-deep .dialog-wrapper .popup-actions-btn button {\n flex: 1;\n}\n::ng-deep .dialog-wrapper .popup-actions-btn {\n display: flex;\n}\n::ng-deep .dialog-wrapper .popup-actions-btn .cancel-btn {\n background: var(--primary-color);\n color: var(--white-color);\n font-size: 16px;\n font-weight: 700;\n line-height: 34px;\n text-align: center;\n border-radius: 10px;\n border: 1px solid transparent;\n\n}\n::ng-deep .dialog-wrapper .popup-actions-btn .yes-btn {\n border:1px solid var(--primary-color);\n background: transparent;\n color: var(--primary-color);\n font-size: 16px;\n font-weight: 700;\n line-height: 34px;\n text-align: center;\n border-radius: 10px;\n box-shadow: none;\n}\n::ng-deep .dialog-wrapper .popup-actions-btn .yes-btn:focus {\n box-shadow: none !important;\n}\n::ng-deep .dialog-wrapper .k-window-title {\n font-size: 30px;\n font-weight: 500;\n line-height: 36px;\n text-align: left;\n color: var(--text-darked);\n}\n::ng-deep .dialog-wrapper p {\n font-size: 16px;\n font-weight: 500;\n line-height: 20px;\n text-align: left;\n color: var(--black);\n}\n\n.margin-left-small {\n margin-left: 10px;\n}\n\n.card-wrapper {\n min-width: 230px;\n height: 150px;\n min-height: 125px;\n}\n\n.padding-top-small {\n padding-top: 10px;\n}\n\n.cursor-pointer {\n cursor: pointer;\n}\n\n.title-folder {\n padding-right: 20px;\n margin: auto;\n}\n\n.title-flex-display {\n display: flex;\n flex-direction: row;\n}\n\n.breadcrumb-icon {\n cursor: pointer;\n}\n.breacrumb-icon:hover {\n color: var(--primary-color);\n}", "\n.main-area {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n gap: 24px;\n padding: 24px 0;\n}\n.list-view {\n padding: 16px;\n min-width: 300px;\n border-radius: 4px;\n background: #FAFAFA;\n border: none;\n}\n::ng-deep .list-view .k-listview-header, \n::ng-deep .list-view .k-listview-footer {\n border: none;\n}\n::ng-deep .list-view .k-listview-content {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 4px;\n background: #fff;\n padding: 16px;\n}\n\n.header,\n.footer {\n color: #424242;\n font-size: 16px;\n height: auto;\n margin:0;\n}\n\n.header {\n color: #424242;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.header .head-tag {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\nfont-size: 16px;\nfont-style: normal;\nfont-weight: 400;\nline-height: 20px;\n}\n\n.header .count {\n width: 24px;\n height: 24px;\n min-width: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 10px;\n background: rgba(0, 0, 0, 0.08);\n border-radius: 50%;\n}\n.footer {\n font-size: 14px;\n margin-top: 16px;\n}\n\n.list-item {\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 30px;\n cursor: pointer;\n margin: 4px;\n}\n.card-container {\n margin: 0;\n padding: 0;\n box-shadow: none;\n}\n.card-header-entity {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n.card-header-entity .title-wrap h1 {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity .title-wrap {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity .title-wrap p {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n\n\n\n\n \n.view-card .view-icon {\n color: var(--sideNav);\n}\n.card-wrapper {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 6px;\n width: 100% !important;\n}\n.card-wrapper .k-card-body {\n background: #fff;\n padding: 12px 20px;\n}\n.card-wrapper .view-card {\n overflow: auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: #fafafa;\n padding: 4px 15px;\n}\n.view-card .btn-wrapper {\n display: flex;\n align-items: center;\n}\n\n.k-card-body .view-card-content h5 {\n color: #424242;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n margin-bottom: 0;\n letter-spacing: 0.18px;\n}\n.k-card-body .view-card-content p {\n color: #666;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n height: 48px;\n margin-bottom: 0;\n}\n.card-container {\n padding: 0;\n margin: 0;\n box-shadow: none;\n}\n.card-header-entity {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n\n.card-header-entity .title-wrap h1 {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity .title-wrap {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity .title-wrap p {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n.main-area .card-list {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 20px;\n}\n"] }]
|