@uxland/primary-shell 3.5.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/index.js +23845 -13736
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.umd.cjs +962 -797
  4. package/dist/index.umd.cjs.map +1 -1
  5. package/dist/primary/shell/src/UI/shared-components/index.d.ts +1 -0
  6. package/dist/primary/shell/src/index.d.ts +1 -0
  7. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/request.d.ts +5 -4
  8. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/add-history-item/request.d.ts +1 -1
  9. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/add-history-items/request.d.ts +1 -1
  10. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/common-filter-spec.d.ts +9 -0
  11. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/custom-filter-spec.d.ts +10 -0
  12. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/false-spec.d.ts +6 -0
  13. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/prop-path-spec.d.ts +9 -0
  14. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/type-spec.d.ts +14 -0
  15. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/export-to-pdf/export-pdf-modal/export-pdf-modal.d.ts +1 -1
  16. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.d.ts +7 -2
  17. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/common-filters.d.ts +3 -0
  18. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/selectors.d.ts +92 -0
  19. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/set-common-filter/actions.d.ts +4 -0
  20. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/{set-common-filter → common-filters/set-common-filter}/handler.d.ts +1 -1
  21. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/set-common-filter/reducer.d.ts +6 -0
  22. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/actions.d.ts +1 -0
  23. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/bootstrapper.d.ts +4 -0
  24. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/handler.d.ts +6 -0
  25. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.d.ts +4 -0
  26. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.d.ts +6 -0
  27. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.d.ts +33 -0
  28. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/actions.d.ts +4 -0
  29. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/bootstrapper.d.ts +4 -0
  30. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/handler.d.ts +6 -0
  31. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/reducer.d.ts +6 -0
  32. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/request.d.ts +10 -0
  33. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/actions.d.ts +1 -0
  34. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/bootstrapper.d.ts +4 -0
  35. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/handler.d.ts +6 -0
  36. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/reducer.d.ts +4 -0
  37. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/request.d.ts +10 -0
  38. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/index.d.ts +1 -0
  39. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/model.d.ts +35 -5
  40. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/selectors.d.ts +0 -154
  41. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/slice.d.ts +20 -0
  42. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/index.d.ts +5 -0
  43. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/handle-error/actions.d.ts +4 -1
  44. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/handle-error/reducers.d.ts +7 -2
  45. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/selectors.d.ts +294 -0
  46. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/update/request.d.ts +1 -1
  47. package/dist/primary/shell/src/internal-plugins/activity-history/index.d.ts +1 -0
  48. package/dist/primary/shell/src/internal-plugins/activity-history/infrastructure/state/store.d.ts +4 -4
  49. package/dist/primary/shell/src/internal-plugins/activity-history/localization.d.ts +3 -0
  50. package/dist/primary/shell/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.d.ts +4 -0
  51. package/dist/primary/shell/src/locales.d.ts +5 -0
  52. package/dist/style.css +1 -1
  53. package/package.json +4 -4
  54. package/src/UI/components/shell-header/template.ts +11 -6
  55. package/src/UI/shared-components/index.ts +1 -0
  56. package/src/index.ts +1 -1
  57. package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/bootstrapper.ts +2 -2
  58. package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/handler.ts +5 -4
  59. package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/request.ts +5 -4
  60. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-item/bootstrapper.ts +2 -2
  61. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-item/request.ts +1 -1
  62. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-items/bootstrapper.ts +2 -2
  63. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-items/request.ts +1 -1
  64. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/common-filter-spec.ts +18 -0
  65. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/custom-filter-spec.ts +59 -0
  66. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/false-spec.ts +8 -0
  67. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/prop-path-spec.ts +19 -0
  68. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/type-spec.ts +26 -0
  69. package/src/internal-plugins/activity-history/activity-history-item/export-to-pdf/export-pdf-modal/export-pdf-modal.css +3 -3
  70. package/src/internal-plugins/activity-history/activity-history-item/export-to-pdf/export-pdf-modal/template.ts +1 -2
  71. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.ts +40 -5
  72. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/styles.css +20 -4
  73. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/template.ts +85 -13
  74. package/src/internal-plugins/activity-history/activity-history-item/filter/bootstrapper.ts +19 -1
  75. package/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/common-filters.ts +26 -0
  76. package/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/selectors.ts +14 -0
  77. package/src/internal-plugins/activity-history/activity-history-item/filter/{actions.ts → common-filters/set-common-filter/actions.ts} +1 -1
  78. package/src/internal-plugins/activity-history/activity-history-item/filter/{set-common-filter → common-filters/set-common-filter}/handler.ts +2 -2
  79. package/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/set-common-filter/reducer.ts +18 -0
  80. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/actions.ts +3 -0
  81. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/bootstrapper.ts +14 -0
  82. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/handler.ts +14 -0
  83. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.ts +9 -0
  84. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.ts +5 -0
  85. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.ts +20 -0
  86. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/actions.ts +3 -0
  87. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/bootstrapper.ts +14 -0
  88. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/handler.ts +13 -0
  89. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/reducer.ts +17 -0
  90. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-group/request.ts +3 -0
  91. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/actions.ts +3 -0
  92. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/bootstrapper.ts +14 -0
  93. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/handler.ts +13 -0
  94. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/reducer.ts +41 -0
  95. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/set-custom-filter-value/request.ts +10 -0
  96. package/src/internal-plugins/activity-history/activity-history-item/filter/index.ts +1 -0
  97. package/src/internal-plugins/activity-history/activity-history-item/filter/model.ts +44 -5
  98. package/src/internal-plugins/activity-history/activity-history-item/filter/selectors.ts +0 -24
  99. package/src/internal-plugins/activity-history/activity-history-item/filter/slice.ts +11 -15
  100. package/src/internal-plugins/activity-history/activity-history-item/index.ts +5 -0
  101. package/src/internal-plugins/activity-history/activity-history-item/list/UI/main-view/activity-history-main.ts +1 -1
  102. package/src/internal-plugins/activity-history/activity-history-item/list/UI/main-view/template.ts +3 -3
  103. package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/activity-history-timeline.ts +1 -1
  104. package/src/internal-plugins/activity-history/activity-history-item/list/handle-error/reducers.ts +7 -2
  105. package/src/internal-plugins/activity-history/activity-history-item/search/activity-history-search-bar/styles.css +1 -1
  106. package/src/internal-plugins/activity-history/activity-history-item/search/activity-history-search-results/styles.css +1 -1
  107. package/src/internal-plugins/activity-history/activity-history-item/selectors.ts +107 -0
  108. package/src/internal-plugins/activity-history/activity-history-item/update/bootstrapper.ts +2 -2
  109. package/src/internal-plugins/activity-history/activity-history-item/update/request.ts +1 -1
  110. package/src/internal-plugins/activity-history/index.ts +1 -0
  111. package/src/internal-plugins/activity-history/localization.ts +3 -0
  112. package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.ts +19 -0
  113. package/src/locales.ts +5 -0
  114. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/actions.d.ts +0 -1
  115. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters.d.ts +0 -3
  116. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/constants.d.ts +0 -7
  117. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/selectors.d.ts +0 -156
  118. package/src/internal-plugins/activity-history/activity-history-item/filter/common-filters.ts +0 -29
  119. package/src/internal-plugins/activity-history/activity-history-item/filter/constants.ts +0 -8
  120. package/src/internal-plugins/activity-history/activity-history-item/list/selectors.ts +0 -62
  121. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/{set-common-filter → common-filters/set-common-filter}/bootstrapper.d.ts +0 -0
  122. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/{set-common-filter → common-filters/set-common-filter}/request.d.ts +0 -0
  123. /package/src/internal-plugins/activity-history/activity-history-item/filter/{set-common-filter → common-filters/set-common-filter}/bootstrapper.ts +0 -0
  124. /package/src/internal-plugins/activity-history/activity-history-item/filter/{set-common-filter → common-filters/set-common-filter}/request.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxland/primary-shell",
3
- "version": "3.5.3",
3
+ "version": "4.0.0",
4
4
  "description": "Primaria Shell",
5
5
  "author": "UXLand <dev@uxland.es>",
6
6
  "homepage": "https://github.com/uxland/harmonix/tree/app#readme",
@@ -26,8 +26,8 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@reduxjs/toolkit": "^2.2.5",
29
- "@uxland/harmonix": "^1.0.0",
30
- "@uxland/harmonix-adapters": "^1.0.1",
29
+ "@uxland/harmonix": "^1.1.0",
30
+ "@uxland/harmonix-adapters": "^2.0.0",
31
31
  "axios": "^1.7.2",
32
32
  "date-fns": "^3.6.0",
33
33
  "inversify": "^6.0.2",
@@ -44,7 +44,7 @@
44
44
  "axios-mock-adapter": "^2.0.0",
45
45
  "inversify": "^6.0.2",
46
46
  "inversify-inject-decorators": "^3.1.0",
47
- "@salut/design-system-salut": "../../design-system-salut-2.0.5.tgz",
47
+ "@salut/design-system-salut": "../../design-system-salut-2.1.1.tgz",
48
48
  "jwt-decode": "^4.0.0",
49
49
  "lit": "^3.1.0",
50
50
  "mediatr-ts": "^1.2.1",
@@ -1,6 +1,8 @@
1
1
  import { html } from "lit";
2
2
  import salutLogo from "../../../UI/images/Salut_Logotip.svg";
3
3
  import { ShellHeader } from "./shell-header";
4
+ import { when } from "lit/directives/when.js";
5
+ import {translate} from '../../../locales';
4
6
 
5
7
  export const template = (props: ShellHeader) => {
6
8
  const workCenterElements = [{ label: props.professional?.workCenter, value: "1" }];
@@ -17,21 +19,24 @@ export const template = (props: ShellHeader) => {
17
19
  </div>
18
20
  <div class="header__right">
19
21
  <div id="header-actions-region-container"></div>
20
- <dss-header-menu-professional slot="professional-menu" name="${props.professional?.firstName} ${props.professional?.familyName} ${props.professional?.lastName}" center="${props.professional?.workCenter}" collegiate="${props.professional?.registrationNumber}">
21
- <dss-avatar size="xl" name="${props.professional?.firstName}" surname="${props.professional?.familyName}" slot="avatar"></dss-avatar>
22
+ ${when(
23
+ props.professional,
24
+ () => html`<dss-header-menu-professional slot="professional-menu" name="${props.professional.firstName} ${props.professional?.familyName} ${props.professional?.lastName}" center="${props.professional.workCenter}" collegiate="${props.professional.registrationNumber}">
25
+ <dss-avatar size="xl" name="${props.professional.firstName}" surname="${props.professional?.familyName}" slot="avatar"></dss-avatar>
22
26
  <dss-input-dropdown icon="maps_home_work" type="default" .elements=${workCenterElements} selectedvalue="[&quot;1&quot;]">
23
- <label slot="label" for="preferences1">Centre treball</label>
27
+ <label slot="label" for="preferences1">${translate("header.workCenter")}</label>
24
28
  <input id="preferences1" slot="input" type="text" class="dss-input" readonly="">
25
29
  </dss-input-dropdown>
26
30
  <dss-input-dropdown icon="business_center" type="default" .elements=${roleElements} selectedvalue="[&quot;1&quot;]">
27
- <label slot="label" for="preferences2">Rol</label>
31
+ <label slot="label" for="preferences2">${translate("header.role")}</label>
28
32
  <input id="preferences2" slot="input" type="text" class="dss-input" readonly="">
29
33
  </dss-input-dropdown>
30
34
  <dss-input-dropdown icon="people_alt" type="default" .elements=${specialityElements} selectedvalue="[&quot;1&quot;]">
31
- <label slot="label" for="preferences3">Ambit treball</label>
35
+ <label slot="label" for="preferences3">${translate("header.speciality")}</label>
32
36
  <input id="preferences3" slot="input" type="text" class="dss-input" readonly="">
33
37
  </dss-input-dropdown>
34
- </dss-header-menu-professional>
38
+ </dss-header-menu-professional>`,
39
+ )}
35
40
  </div>
36
41
  </div>
37
42
  `;
@@ -2,3 +2,4 @@ import "./primaria-content-switcher/primaria-content-switcher";
2
2
  import "./primaria-nav-item/primaria-nav-item";
3
3
  import "./primaria-text-editor/primaria-rich-text-editor";
4
4
  export * from "./primaria-interaction";
5
+ export { PrimariaContentSwitcher } from "./primaria-content-switcher/primaria-content-switcher";
package/src/index.ts CHANGED
@@ -5,7 +5,7 @@ export * from "./api/region-manager/regions";
5
5
  export * from "./handle-plugins";
6
6
  export * from "./api/api";
7
7
  export * from "./api/broker/primaria-broker";
8
- import "./UI/index";
8
+ export * from "./UI/index";
9
9
  export { PrimariaNavItem } from "./UI/shared-components/primaria-nav-item/primaria-nav-item";
10
10
  export { confirmMixin } from "./UI/shared-components/primaria-interaction";
11
11
  export type { CustomConfirmOptions } from "./UI/shared-components/primaria-interaction";
@@ -1,12 +1,12 @@
1
1
  import { BrokerExtensions } from "@primaria/plugins-core";
2
- import { injectAsyncHistoryItemsRequest } from "./request";
2
+ import { addAsyncHistoryItemsCommand } from "./request";
3
3
  import { InjectAsyncHistoryItemsHandler } from "./handler";
4
4
  import { BrokerDisposableHandler } from "../../../../../api/broker/primaria-broker";
5
5
 
6
6
  let request: BrokerDisposableHandler;
7
7
 
8
8
  export const bootstrapInjectAsyncHistoryItems = (broker: BrokerExtensions) => {
9
- request = broker.registerRequest(injectAsyncHistoryItemsRequest, InjectAsyncHistoryItemsHandler);
9
+ request = broker.registerRequest(addAsyncHistoryItemsCommand, InjectAsyncHistoryItemsHandler);
10
10
  };
11
11
 
12
12
  export const teardownInjectAsyncHistoryItems = () => {
@@ -1,21 +1,22 @@
1
1
  import { BaseHandler } from "../../../infrastructure/base-handlers";
2
+ import { AddCustomFiltersCommand } from "../../filter/custom-filters/add-custom-filters/request";
2
3
  import { addBusyHistoryItem, removeBusyHistoryItem } from "../../list/handle-busy/actions";
3
4
  import { addErrorHistoryItem } from "../../list/handle-error/actions";
4
- import { addHistoryItemsRequest } from "../add-history-items/request";
5
+ import { addHistoryItemsCommand } from "../add-history-items/request";
5
6
  import { InjectAsyncHistoryItemsPayload } from "./request";
6
7
 
7
8
  export class InjectAsyncHistoryItemsHandler extends BaseHandler {
8
9
  async handle(payload: InjectAsyncHistoryItemsPayload) {
9
10
  this.store.dispatch(addBusyHistoryItem(payload.entityId));
10
11
  try {
11
- let items = await payload.asyncTask();
12
- if (payload.mapFn) items = items.map(payload.mapFn);
13
- this.api.broker.send(addHistoryItemsRequest, {
12
+ const items = await payload.asyncDataProvider();
13
+ this.api.broker.send(addHistoryItemsCommand, {
14
14
  entityId: payload.entityId,
15
15
  items,
16
16
  componentFactory: payload.componentFactory,
17
17
  searchPredicate: payload.searchPredicate,
18
18
  });
19
+ payload.filters ? this.api.broker.send(new AddCustomFiltersCommand(payload.filters)) : null;
19
20
  } catch (e) {
20
21
  this.store.dispatch(
21
22
  addErrorHistoryItem({ id: payload.entityId, message: payload.errorMessage || e.message }),
@@ -1,12 +1,13 @@
1
1
  import { IActivityHistoryItem } from "../../domain/model";
2
+ import { IActivityHistoryCommonFilterGroup } from "../../filter";
2
3
 
3
4
  export interface InjectAsyncHistoryItemsPayload {
4
5
  entityId: string;
5
- asyncTask: () => Promise<any>;
6
- mapFn?: (item: any) => any;
6
+ asyncDataProvider: () => Promise<IActivityHistoryItem[]>;
7
7
  componentFactory: (item: IActivityHistoryItem) => HTMLElement;
8
- searchPredicate?: (searchString: string, item: any) => boolean;
8
+ searchPredicate?: (searchString: string, item: IActivityHistoryItem) => boolean;
9
9
  errorMessage: string;
10
+ filters?: IActivityHistoryCommonFilterGroup;
10
11
  }
11
12
 
12
- export const injectAsyncHistoryItemsRequest = "inject_async_history_items_request";
13
+ export const addAsyncHistoryItemsCommand = "inject_async_history_items_request";
@@ -1,12 +1,12 @@
1
1
  import { BrokerExtensions } from "@primaria/plugins-core";
2
2
  import { AddHistoryItemHandler } from "./handler";
3
- import { addHistoryItemRequest } from "./request";
3
+ import { addHistoryItemCommand } from "./request";
4
4
  import { BrokerDisposableHandler } from "../../../../../api/broker/primaria-broker";
5
5
 
6
6
  let request: BrokerDisposableHandler;
7
7
 
8
8
  export const bootstrapAddHistoryItem = (broker: BrokerExtensions) => {
9
- request = broker.registerRequest(addHistoryItemRequest, AddHistoryItemHandler);
9
+ request = broker.registerRequest(addHistoryItemCommand, AddHistoryItemHandler);
10
10
  };
11
11
 
12
12
  export const teardownAddHistoryItem = () => {
@@ -5,4 +5,4 @@ export interface AddHistoryItemPayload {
5
5
  item: IActivityHistoryItem;
6
6
  }
7
7
 
8
- export const addHistoryItemRequest = "add_history_item_request";
8
+ export const addHistoryItemCommand = "add_history_item_request";
@@ -1,12 +1,12 @@
1
1
  import { BrokerExtensions } from "@primaria/plugins-core";
2
2
  import { AddHistoryItemsHandler } from "./handler";
3
- import { addHistoryItemsRequest } from "./request";
3
+ import { addHistoryItemsCommand } from "./request";
4
4
  import { BrokerDisposableHandler } from "../../../../../api/broker/primaria-broker";
5
5
 
6
6
  let request: BrokerDisposableHandler;
7
7
 
8
8
  export const bootstrapAddHistoryItems = (broker: BrokerExtensions) => {
9
- request = broker.registerRequest(addHistoryItemsRequest, AddHistoryItemsHandler);
9
+ request = broker.registerRequest(addHistoryItemsCommand, AddHistoryItemsHandler);
10
10
  };
11
11
 
12
12
  export const teardownAddHistoryItems = () => {
@@ -7,4 +7,4 @@ export interface AddHistoryItemsPayload {
7
7
  searchPredicate?: (searchString: string, item: any) => boolean;
8
8
  }
9
9
 
10
- export const addHistoryItemsRequest = "add_history_items_request";
10
+ export const addHistoryItemsCommand = "add_history_items_request";
@@ -0,0 +1,18 @@
1
+ import { IActivityHistoryCommonFilter } from "../../filter";
2
+ import { IActivityHistoryItem } from "../model";
3
+ import { Spec } from "./spec";
4
+ import { TrueSpec } from "./true-spec";
5
+
6
+ export class CommonFilterSpec extends Spec<IActivityHistoryItem> {
7
+ constructor(private commonFilters: IActivityHistoryCommonFilter[]) {
8
+ super();
9
+ }
10
+
11
+ isSatisfiedBy(item: IActivityHistoryItem): boolean {
12
+ const enabledCommonFilters = this.commonFilters.filter((f) => f.enabled);
13
+ const finalCommonSpec = enabledCommonFilters.reduce((acc, filter) => {
14
+ return acc.and(new filter.spec());
15
+ }, new TrueSpec());
16
+ return finalCommonSpec.isSatisfiedBy(item);
17
+ }
18
+ }
@@ -0,0 +1,59 @@
1
+ import { IActivityHistoryCommonFilterGroup, IActivityHistoryCustomFilterGroup } from "../../filter";
2
+ import { IActivityHistoryItem } from "../model";
3
+ import { FalseSpec } from "./false-spec";
4
+ import { PropPathSpec } from "./prop-path-spec";
5
+ import { Spec } from "./spec";
6
+
7
+ export class CustomFilterSpec extends Spec<IActivityHistoryItem> {
8
+ constructor(private filters: IActivityHistoryCustomFilterGroup[]) {
9
+ super();
10
+ }
11
+
12
+ isSatisfiedBy(item: IActivityHistoryItem): boolean {
13
+ const enabledGroups = this.filters.filter((group) => group.enabled);
14
+
15
+ if (enabledGroups.length === 0) {
16
+ return true; // No hay filtros activados, se aceptan todos los items
17
+ }
18
+
19
+ return enabledGroups.every((group) => {
20
+ if (!this.belongsToGroup(item, group)) {
21
+ return true;
22
+ }
23
+
24
+ const enabledFilters = group.filters.filter(
25
+ (filter) => filter.enabled || filter.singleOption,
26
+ );
27
+
28
+ if (enabledFilters.length === 0) {
29
+ return true;
30
+ }
31
+
32
+ return enabledFilters.every((filter) => {
33
+ if (filter.singleOption) {
34
+ // Si el filtro booleano está DESACTIVADO, debe filtrar los elementos con ese valor
35
+ return !filter.enabled
36
+ ? new PropPathSpec(filter.propPathValue, false).isSatisfiedBy(item)
37
+ : true; // Si está activado, no filtra nada
38
+ }
39
+
40
+ if (!filter.enabledValues || filter.enabledValues.length === 0) {
41
+ return true;
42
+ }
43
+
44
+ const propSpec = filter.enabledValues.reduce((acc, value) => {
45
+ return acc.or(new PropPathSpec(filter.propPathValue, value));
46
+ }, new FalseSpec());
47
+
48
+ return propSpec.isSatisfiedBy(item);
49
+ });
50
+ });
51
+ }
52
+
53
+ private belongsToGroup(
54
+ item: IActivityHistoryItem,
55
+ group: IActivityHistoryCustomFilterGroup,
56
+ ): boolean {
57
+ return item.type === group.id;
58
+ }
59
+ }
@@ -0,0 +1,8 @@
1
+ import { IActivityHistoryItem } from "../model";
2
+ import { Spec } from "./spec";
3
+
4
+ export class FalseSpec extends Spec<IActivityHistoryItem> {
5
+ isSatisfiedBy(): boolean {
6
+ return false;
7
+ }
8
+ }
@@ -0,0 +1,19 @@
1
+ import { IActivityHistoryItem } from "../model";
2
+ import { Spec } from "./spec";
3
+
4
+ export class PropPathSpec extends Spec<IActivityHistoryItem> {
5
+ constructor(
6
+ public propPath: string[],
7
+ private value: any,
8
+ ) {
9
+ super();
10
+ }
11
+
12
+ isSatisfiedBy(context: IActivityHistoryItem): boolean {
13
+ // Reducir el context siguiendo el path hasta llegar al valor final
14
+ const propValue = this.propPath.reduce((acc, key) => acc?.[key], context);
15
+
16
+ // Comparar con el valor esperado
17
+ return propValue === this.value;
18
+ }
19
+ }
@@ -0,0 +1,26 @@
1
+ import { IActivityHistoryCustomFilterGroup } from "../../filter";
2
+ import { IActivityHistoryItem } from "../model";
3
+ import { FalseSpec } from "./false-spec";
4
+ import { Spec } from "./spec";
5
+
6
+ export class TypeSpec extends Spec<IActivityHistoryItem> {
7
+ constructor(public itemType: string) {
8
+ super();
9
+ }
10
+ isSatisfiedBy(context: IActivityHistoryItem): boolean {
11
+ return context?.type === this.itemType;
12
+ }
13
+ }
14
+
15
+ export class ComposedTypeSpec extends Spec<IActivityHistoryItem> {
16
+ constructor(public filters: IActivityHistoryCustomFilterGroup[]) {
17
+ super();
18
+ }
19
+ isSatisfiedBy(item: IActivityHistoryItem): boolean {
20
+ const enabledGroupTypes = this.filters.filter((f) => f.enabled).map((f) => f.id);
21
+ const finalSpec = enabledGroupTypes.reduce((acc, groupId) => {
22
+ return acc.or(new TypeSpec(groupId));
23
+ }, new FalseSpec());
24
+ return finalSpec.isSatisfiedBy(item);
25
+ }
26
+ }
@@ -43,8 +43,8 @@ dss-datepicker {
43
43
  width: 234px;
44
44
  height: 48px;
45
45
  border-radius: var(--dss-radius-sm);
46
- border: var(--dds-border-width-sm);
47
- padding: var(--dds-spacing-sm);
48
- gap: var(--dds-spacing-xs);
46
+ border: var(--dss-border-width-sm);
47
+ padding: var(--dss-spacing-sm);
48
+ gap: var(--dss-spacing-xs);
49
49
  color: var(--color-neutral-100);
50
50
  }
@@ -37,8 +37,7 @@ export const template = (props: ExportPdfModal) => {
37
37
  <div class="datepicker-canvas">
38
38
  <dss-datepicker-range inputsize="md" @onRangeChange=${(e) => {
39
39
  props.selectedPeriodDate = e.detail;
40
- }} helpText="Sense seleccionar data, s'aplicarà la de la primera entrada.
41
- Sense seleccionar data de fi, s'aplicarà la de l'última entrada.">
40
+ }} helpText=${translate("modal.helpText")}>
42
41
  <label slot="label-range-start" for="myDatepickerRangeStart">${translate("modal.startDate")}</label>
43
42
  <input slot="input-range-start" id="myDatepickerRangeStart" type="text" class="dss-input">
44
43
  <label slot="label-range-end" for="myDatepickerRangeEnd">${translate("modal.endDate")}</label>
@@ -1,14 +1,17 @@
1
1
  import { LitElement, css, html, unsafeCSS } from "lit";
2
- import { customElement, state } from "lit/decorators.js";
2
+ import { customElement, property, state } from "lit/decorators.js";
3
3
  import { PrimariaApi } from "../../../../../../api/api";
4
- import { IActivityHistoryFilter } from "../../model";
5
4
  import { lazyInject } from "../../../../infrastructure/ioc/container";
6
5
  import { TYPES } from "../../../../infrastructure/ioc/types";
7
6
  import { connectedProperty } from "../../../../infrastructure/state/connected-property";
7
+ import { IActivityHistoryCommonFilter, IActivityHistoryCustomFilterGroup } from "../../model";
8
8
  import styles from "./styles.css?inline";
9
9
  import { template } from "./template";
10
- import { activityHistoryCommonFiltersSelector } from "../../selectors";
11
- import { SetCommonFilter } from "../../set-common-filter/request";
10
+ import { SetCustomFilterGroup } from "../../custom-filters/set-custom-filter-group/request";
11
+ import { SetCommonFilter } from "../../common-filters/set-common-filter/request";
12
+ import { activityHistoryCommonFiltersSelector } from "../../common-filters/selectors";
13
+ import { SetCustomFilterValue } from "../../custom-filters/set-custom-filter-value/request";
14
+ import { customFilterGroupsWithOptionsSelector } from "../../../selectors";
12
15
 
13
16
  //@ts-ignore
14
17
  @customElement("activity-history-filters")
@@ -22,7 +25,10 @@ export class ActivityHistoryFilters extends LitElement {
22
25
  `;
23
26
 
24
27
  @connectedProperty(activityHistoryCommonFiltersSelector)
25
- filters: IActivityHistoryFilter[];
28
+ commonFilters: IActivityHistoryCommonFilter[];
29
+
30
+ @connectedProperty(customFilterGroupsWithOptionsSelector)
31
+ customFilterGroups: IActivityHistoryCustomFilterGroup[];
26
32
 
27
33
  @lazyInject(TYPES.primaryApi)
28
34
  api: PrimariaApi;
@@ -30,6 +36,15 @@ export class ActivityHistoryFilters extends LitElement {
30
36
  @state()
31
37
  filtersExpanded = false;
32
38
 
39
+ @property({ type: Boolean })
40
+ wrapperMaximized: boolean;
41
+
42
+ updated(changedProperties) {
43
+ if (changedProperties.has("wrapperMaximized")) {
44
+ this.filtersExpanded = this.wrapperMaximized;
45
+ }
46
+ }
47
+
33
48
  _toggleFilters() {
34
49
  this.filtersExpanded = !this.filtersExpanded;
35
50
  }
@@ -37,4 +52,24 @@ export class ActivityHistoryFilters extends LitElement {
37
52
  _onChangeCommonFilterValue(filterId: string, value: boolean) {
38
53
  this.api.broker.send(new SetCommonFilter({ id: filterId, enabled: value }));
39
54
  }
55
+
56
+ _onChangeCustomFilterGroupValue(filterGroupId: string, value: boolean) {
57
+ this.api.broker.send(new SetCustomFilterGroup({ id: filterGroupId, enabled: value }));
58
+ }
59
+
60
+ _onChangeCustomFilterValue(
61
+ filterGroupId: string,
62
+ filterId: string,
63
+ optionId: string,
64
+ value: boolean,
65
+ ) {
66
+ this.api.broker.send(
67
+ new SetCustomFilterValue({
68
+ filterGroupId,
69
+ filterId,
70
+ optionId,
71
+ enabled: value,
72
+ }),
73
+ );
74
+ }
40
75
  }
@@ -26,14 +26,30 @@
26
26
 
27
27
 
28
28
  .filter-container{
29
- display: flex;
29
+ display: flex;
30
30
  flex-direction: column;
31
31
  padding: 16px 8px 8px 8px;
32
-
33
-
32
+ overflow:auto;
34
33
  }
35
34
 
36
35
  .filter-container .filter{
37
36
  padding: 8px 0;
38
37
  border-bottom: 1px solid var(--color-neutral-200);
39
- }
38
+ }
39
+
40
+ .filter-group{
41
+ display: flex;
42
+ flex-direction: column;
43
+ padding-top: 12px;
44
+
45
+ .custom-filter{
46
+ display: flex;
47
+ flex-direction: column;
48
+ padding: 6px 8px 6px var(--dss-spacing-xl);
49
+
50
+ .custom-filter-content{
51
+ display: flex;
52
+ flex-direction: column;
53
+ }
54
+ }
55
+ }
@@ -1,19 +1,57 @@
1
1
  import { html } from "lit";
2
2
  import { ActivityHistoryFilters } from "./activity-history-filters";
3
3
  import { repeat } from "lit/directives/repeat.js";
4
- import { IActivityHistoryFilter } from "../../model";
5
- import { ActivityHistoryFilterType } from "../../constants";
4
+ import {
5
+ ActivityHistoryFilterType,
6
+ IActivityHistoryCommonFilter,
7
+ IActivityHistoryCustomFilter,
8
+ IActivityHistoryCustomFilterGroup,
9
+ IActivityHistoryFilterGroup,
10
+ } from "../../model";
6
11
  import { translate } from "../../../../localization";
7
12
 
8
- const getFilterTemplate = (props: ActivityHistoryFilters, filter: IActivityHistoryFilter) => {
9
- switch (filter.type) {
10
- case ActivityHistoryFilterType.Switch:
11
- return html`
12
- <dss-input-switch size="sm" @onChangeValue=${(e) => props._onChangeCommonFilterValue(filter.id, e.detail)}>
13
- <input slot="input" id="switch-${filter.id}" aria-label=${filter.title} type="checkbox">
14
- <label slot="label" for="switch-${filter.id}">${filter.title}</label>
15
- </dss-input-switch>`;
16
- }
13
+ const filterTemplates = {
14
+ [ActivityHistoryFilterType.Switch]: (id, title, handleChange, isSelected, isEnabled) => html`
15
+ <dss-input-switch size="sm" .checked=${isSelected} @onChangeValue=${handleChange} >
16
+ <input slot="input" id="switch-${id}" aria-label=${title} type="checkbox" ?disabled=${!isEnabled}>
17
+ <label slot="label" for="switch-${id}">${title}</label>
18
+ </dss-input-switch>`,
19
+
20
+ [ActivityHistoryFilterType.Checkbox]: (id, title, handleChange, isSelected, isEnabled) => html`
21
+ <dss-checkbox variant="default" .checked=${isSelected} @onChange=${(e) => handleChange(e)}>
22
+ <input slot="input" id="checkboxStory-${id}" type="checkbox" ?disabled=${!isEnabled}>
23
+ <label slot="label" for="checkboxStory-${id}">${title}</label>
24
+ </dss-checkbox>`,
25
+ };
26
+
27
+ const getFilterTemplate = (
28
+ filter: IActivityHistoryCommonFilter | IActivityHistoryCustomFilter,
29
+ onChangeValue: (...args: any[]) => void,
30
+ filterGroup?: IActivityHistoryFilterGroup,
31
+ option?: { id: string; title: string },
32
+ ) => {
33
+ const isCustom = !!filterGroup?.id && !!option;
34
+ //const id = isCustom ? `${filterGroupId}-${filter.id}-${option.id}` : filter.id;
35
+ const id = crypto.randomUUID();
36
+ const title = isCustom ? option.title : filter.title;
37
+
38
+ const handleChange = (e) => {
39
+ if (filter.singleOption) onChangeValue(filterGroup?.id, filter.id, null, e.detail);
40
+ else if (isCustom && option) onChangeValue(filterGroup?.id, filter.id, option.id, e.detail);
41
+ else onChangeValue(filter.id, e.detail);
42
+ };
43
+
44
+ const isSelected =
45
+ isCustom && option
46
+ ? (filter as IActivityHistoryCustomFilter).enabledValues?.includes(option.id)
47
+ : filter.enabled;
48
+
49
+ const isEnabled =
50
+ (isCustom && option) || filter.singleOption
51
+ ? (filterGroup as IActivityHistoryCustomFilterGroup).enabled
52
+ : true;
53
+
54
+ return filterTemplates[filter.type]?.(id, title, handleChange, isSelected, isEnabled) || html``;
17
55
  };
18
56
 
19
57
  export const template = (props: ActivityHistoryFilters) =>
@@ -21,10 +59,44 @@ export const template = (props: ActivityHistoryFilters) =>
21
59
  <div class="filters-sidebar" ?expanded=${props.filtersExpanded} >
22
60
  ${
23
61
  props.filtersExpanded
24
- ? html`<div class="filters-sidebar-opened">${translate("filters.filters")}<dss-icon-button @click=${() => props._toggleFilters()} size="md" variant="primary" icon="keyboard_double_arrow_left"></dss-icon-button></div><div class="filter-container">
25
- ${repeat(props.filters, (filter: IActivityHistoryFilter) => html`<div class="filter">${getFilterTemplate(props, filter)}</div> `)}
62
+ ? html`<div class="filters-sidebar-opened">${translate("filters.filters")}<dss-icon-button ?hidden=${props.wrapperMaximized} @click=${() => props._toggleFilters()} size="md" variant="primary" icon="keyboard_double_arrow_left"></dss-icon-button></div>
63
+ <div class="filter-container">
64
+ ${repeat(props.commonFilters, (filter: IActivityHistoryCommonFilter) => html`<div class="filter">${getFilterTemplate(filter, props._onChangeCommonFilterValue.bind(props))}</div> `)}
65
+ ${repeat(
66
+ props.customFilterGroups,
67
+ (group: IActivityHistoryCustomFilterGroup) => html`
68
+ <div class="filter-group">
69
+ <dss-input-switch size="sm" .checked=${group.enabled} @onChangeValue=${(e) => props._onChangeCustomFilterGroupValue(group.id, e.detail)}>
70
+ <input slot="input" id="switch-${group.id}" aria-label=${group.title} type="checkbox">
71
+ <label slot="label" for="switch-${group.id}">${group.title}</label>
72
+ </dss-input-switch>
73
+ ${
74
+ group?.filters &&
75
+ repeat(group.filters, (filter: IActivityHistoryCustomFilter) =>
76
+ customFilterTemplate(filter, props, group),
77
+ )
78
+ }
79
+ </div> `,
80
+ )}
26
81
  </div> `
27
82
  : html`<dss-icon-button @click=${() => props._toggleFilters()} size="md" variant="primary" icon="keyboard_double_arrow_right"></dss-icon-button>`
28
83
  }
29
84
  </div>
30
85
  `;
86
+
87
+ const customFilterTemplate = (
88
+ filter: IActivityHistoryCustomFilter,
89
+ props: ActivityHistoryFilters,
90
+ group: IActivityHistoryCustomFilterGroup,
91
+ ) =>
92
+ html`
93
+ <div class="custom-filter">
94
+ ${
95
+ filter.singleOption
96
+ ? getFilterTemplate(filter, props._onChangeCustomFilterValue.bind(props), group)
97
+ : html`<div class="custom-filter-title">${filter.title}</div>
98
+ <div class="custom-filter-content">${repeat(filter.options, (option) => html`${getFilterTemplate(filter, props._onChangeCustomFilterValue.bind(props), group, option)}`)}</div>`
99
+ }
100
+
101
+ </div>
102
+ `;
@@ -3,12 +3,30 @@ import "../../activity-history-item/filter/UI/activity-history-filters/activity-
3
3
  import {
4
4
  bootstrapSetCommonFilter,
5
5
  teardownSetCommonFilter,
6
- } from "./set-common-filter/bootstrapper";
6
+ } from "./common-filters/set-common-filter/bootstrapper";
7
+ import {
8
+ bootstrapAddCustomFilter,
9
+ teardownAddCustomFilter,
10
+ } from "./custom-filters/add-custom-filters/bootstrapper";
11
+ import {
12
+ bootstrapSetCustomFilterGroup,
13
+ teardownSetCustomFilterGroup,
14
+ } from "./custom-filters/set-custom-filter-group/bootstrapper";
15
+ import {
16
+ bootstrapSetCustomFilterValue,
17
+ teardownSetCustomFilterValue,
18
+ } from "./custom-filters/set-custom-filter-value/bootstrapper";
7
19
 
8
20
  export const bootstrapFilters = (broker: BrokerExtensions) => {
9
21
  bootstrapSetCommonFilter(broker);
22
+ bootstrapAddCustomFilter(broker);
23
+ bootstrapSetCustomFilterGroup(broker);
24
+ bootstrapSetCustomFilterValue(broker);
10
25
  };
11
26
 
12
27
  export const teardownFilters = () => {
13
28
  teardownSetCommonFilter();
29
+ teardownAddCustomFilter();
30
+ teardownSetCustomFilterGroup();
31
+ teardownSetCustomFilterValue();
14
32
  };
@@ -0,0 +1,26 @@
1
+ import { OwnSpec } from "../../domain/specs/own-spec";
2
+ import { RelevantSpec } from "../../domain/specs/relevant-spec";
3
+ import { IActivityHistoryCommonFilterGroup, ActivityHistoryFilterType } from "../model";
4
+
5
+ export const commonFilters: IActivityHistoryCommonFilterGroup[] = [
6
+ {
7
+ id: "common",
8
+ title: "Comuns",
9
+ filters: [
10
+ {
11
+ id: "relevant",
12
+ title: "Veure rellevants",
13
+ spec: RelevantSpec,
14
+ enabled: false,
15
+ type: ActivityHistoryFilterType.Switch,
16
+ },
17
+ {
18
+ id: "own",
19
+ title: "Veure meus",
20
+ spec: OwnSpec,
21
+ enabled: false,
22
+ type: ActivityHistoryFilterType.Switch,
23
+ },
24
+ ],
25
+ },
26
+ ];