@conduction/nextcloud-vue 2.133.0 → 2.134.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/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +85 -10
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +60 -36
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue.js +1 -1
- package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue2.js +10 -0
- package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue.js +1 -1
- package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js +202 -6
- package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js +137 -55
- package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js.map +1 -1
- package/dist/esm/dialogs/CnPartyAddDialog.vue.js +9 -0
- package/dist/esm/dialogs/CnPartyAddDialog.vue.js.map +1 -0
- package/dist/esm/dialogs/CnPartyAddDialog.vue2.js +184 -0
- package/dist/esm/dialogs/CnPartyAddDialog.vue2.js.map +1 -0
- package/dist/esm/dialogs/CnPartyAddDialog.vue3.js +168 -0
- package/dist/esm/dialogs/CnPartyAddDialog.vue3.js.map +1 -0
- package/dist/esm/l10n/en.json.js +11 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +11 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +95 -70
- package/dist/esm/utils/objectParties.js +79 -1
- package/dist/esm/utils/objectParties.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +5683 -4860
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +95 -70
- package/l10n/en.json +11 -1
- package/l10n/nl.json +11 -1
- package/package.json +1 -1
- package/src/components/CnFieldListWidget/CnFieldListWidget.vue +105 -12
- package/src/components/CnIntegrationWidget/CnIntegrationWidget.vue +10 -0
- package/src/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue +264 -3
- package/src/dialogs/CnPartyAddDialog.vue +309 -0
- package/src/utils/objectParties.js +78 -0
|
@@ -31613,27 +31613,27 @@ to { background-position: -200% 0;
|
|
|
31613
31613
|
}
|
|
31614
31614
|
|
|
31615
31615
|
|
|
31616
|
-
.cn-integration-widget[data-v-
|
|
31616
|
+
.cn-integration-widget[data-v-1b6b243b] {
|
|
31617
31617
|
width: 100%;
|
|
31618
31618
|
display: flex;
|
|
31619
31619
|
flex-direction: column;
|
|
31620
31620
|
min-height: 0;
|
|
31621
31621
|
}
|
|
31622
|
-
.cn-integration-widget__tabbar[data-v-
|
|
31622
|
+
.cn-integration-widget__tabbar[data-v-1b6b243b] {
|
|
31623
31623
|
display: flex;
|
|
31624
31624
|
align-items: flex-end;
|
|
31625
31625
|
gap: 8px;
|
|
31626
31626
|
border-bottom: 1px solid var(--color-border);
|
|
31627
31627
|
margin-bottom: 12px;
|
|
31628
31628
|
}
|
|
31629
|
-
.cn-integration-widget__tabs[data-v-
|
|
31629
|
+
.cn-integration-widget__tabs[data-v-1b6b243b] {
|
|
31630
31630
|
display: flex;
|
|
31631
31631
|
flex-wrap: wrap;
|
|
31632
31632
|
gap: 2px;
|
|
31633
31633
|
flex: 1;
|
|
31634
31634
|
min-width: 0;
|
|
31635
31635
|
}
|
|
31636
|
-
.cn-integration-widget__tab[data-v-
|
|
31636
|
+
.cn-integration-widget__tab[data-v-1b6b243b] {
|
|
31637
31637
|
display: inline-flex;
|
|
31638
31638
|
align-items: center;
|
|
31639
31639
|
gap: 6px;
|
|
@@ -31646,27 +31646,27 @@ to { background-position: -200% 0;
|
|
|
31646
31646
|
font-size: 0.95em;
|
|
31647
31647
|
cursor: pointer;
|
|
31648
31648
|
}
|
|
31649
|
-
.cn-integration-widget__tab[data-v-
|
|
31649
|
+
.cn-integration-widget__tab[data-v-1b6b243b]:hover {
|
|
31650
31650
|
background: var(--color-background-hover);
|
|
31651
31651
|
color: var(--color-main-text);
|
|
31652
31652
|
}
|
|
31653
|
-
.cn-integration-widget__tab[data-v-
|
|
31653
|
+
.cn-integration-widget__tab[data-v-1b6b243b]:focus-visible {
|
|
31654
31654
|
outline: 2px solid var(--color-primary-element);
|
|
31655
31655
|
outline-offset: -2px;
|
|
31656
31656
|
}
|
|
31657
|
-
.cn-integration-widget__tab--active[data-v-
|
|
31657
|
+
.cn-integration-widget__tab--active[data-v-1b6b243b] {
|
|
31658
31658
|
color: var(--color-main-text);
|
|
31659
31659
|
font-weight: 600;
|
|
31660
31660
|
border-bottom-color: var(--cn-iw-accent, var(--color-primary-element));
|
|
31661
31661
|
}
|
|
31662
|
-
.cn-integration-widget__tab-icon[data-v-
|
|
31662
|
+
.cn-integration-widget__tab-icon[data-v-1b6b243b] {
|
|
31663
31663
|
color: var(--cn-iw-accent, currentColor);
|
|
31664
31664
|
flex-shrink: 0;
|
|
31665
31665
|
}
|
|
31666
|
-
.cn-integration-widget__tab-label[data-v-
|
|
31666
|
+
.cn-integration-widget__tab-label[data-v-1b6b243b] {
|
|
31667
31667
|
white-space: nowrap;
|
|
31668
31668
|
}
|
|
31669
|
-
.cn-integration-widget__header[data-v-
|
|
31669
|
+
.cn-integration-widget__header[data-v-1b6b243b] {
|
|
31670
31670
|
display: flex;
|
|
31671
31671
|
align-items: center;
|
|
31672
31672
|
gap: 8px;
|
|
@@ -31674,23 +31674,23 @@ to { background-position: -200% 0;
|
|
|
31674
31674
|
margin-bottom: 8px;
|
|
31675
31675
|
border-bottom: 2px solid var(--cn-iw-accent, var(--color-border));
|
|
31676
31676
|
}
|
|
31677
|
-
.cn-integration-widget__header-icon[data-v-
|
|
31677
|
+
.cn-integration-widget__header-icon[data-v-1b6b243b] {
|
|
31678
31678
|
color: var(--cn-iw-accent, var(--color-main-text));
|
|
31679
31679
|
flex-shrink: 0;
|
|
31680
31680
|
}
|
|
31681
|
-
.cn-integration-widget__header-label[data-v-
|
|
31681
|
+
.cn-integration-widget__header-label[data-v-1b6b243b] {
|
|
31682
31682
|
font-weight: 600;
|
|
31683
31683
|
color: var(--color-main-text);
|
|
31684
31684
|
}
|
|
31685
|
-
.cn-integration-widget__header-actions[data-v-
|
|
31685
|
+
.cn-integration-widget__header-actions[data-v-1b6b243b] {
|
|
31686
31686
|
margin-inline-start: auto;
|
|
31687
31687
|
flex-shrink: 0;
|
|
31688
31688
|
}
|
|
31689
|
-
.cn-integration-widget__panel[data-v-
|
|
31689
|
+
.cn-integration-widget__panel[data-v-1b6b243b] {
|
|
31690
31690
|
flex: 1;
|
|
31691
31691
|
min-height: 0;
|
|
31692
31692
|
}
|
|
31693
|
-
.cn-integration-widget__panel[data-v-
|
|
31693
|
+
.cn-integration-widget__panel[data-v-1b6b243b]:focus-visible {
|
|
31694
31694
|
outline: 2px solid var(--color-primary-element);
|
|
31695
31695
|
outline-offset: -2px;
|
|
31696
31696
|
}
|
|
@@ -39208,38 +39208,38 @@ button.cn-linked-widget__link[data-v-0fc31606] {
|
|
|
39208
39208
|
}
|
|
39209
39209
|
|
|
39210
39210
|
|
|
39211
|
-
.cn-field-list-widget[data-v-
|
|
39211
|
+
.cn-field-list-widget[data-v-91c65ff8] {
|
|
39212
39212
|
display: flex;
|
|
39213
39213
|
flex-direction: column;
|
|
39214
39214
|
gap: 12px;
|
|
39215
39215
|
min-width: 0;
|
|
39216
39216
|
}
|
|
39217
|
-
.cn-field-list-widget__lead[data-v-
|
|
39217
|
+
.cn-field-list-widget__lead[data-v-91c65ff8] {
|
|
39218
39218
|
margin: 0;
|
|
39219
39219
|
font-weight: bold;
|
|
39220
39220
|
}
|
|
39221
|
-
.cn-field-list-widget__rows[data-v-
|
|
39221
|
+
.cn-field-list-widget__rows[data-v-91c65ff8] {
|
|
39222
39222
|
list-style: none;
|
|
39223
39223
|
margin: 0;
|
|
39224
39224
|
padding: 0;
|
|
39225
39225
|
display: flex;
|
|
39226
39226
|
flex-direction: column;
|
|
39227
39227
|
}
|
|
39228
|
-
.cn-field-list-widget__row[data-v-
|
|
39228
|
+
.cn-field-list-widget__row[data-v-91c65ff8] {
|
|
39229
39229
|
padding: 10px 0;
|
|
39230
39230
|
border-top: 1px solid var(--color-border);
|
|
39231
39231
|
}
|
|
39232
|
-
.cn-field-list-widget__row[data-v-
|
|
39232
|
+
.cn-field-list-widget__row[data-v-91c65ff8]:first-child {
|
|
39233
39233
|
border-top: none;
|
|
39234
39234
|
padding-top: 0;
|
|
39235
39235
|
}
|
|
39236
|
-
.cn-field-list-widget__line[data-v-
|
|
39236
|
+
.cn-field-list-widget__line[data-v-91c65ff8] {
|
|
39237
39237
|
display: flex;
|
|
39238
39238
|
align-items: center;
|
|
39239
39239
|
gap: 12px;
|
|
39240
39240
|
min-width: 0;
|
|
39241
39241
|
}
|
|
39242
|
-
.cn-field-list-widget__avatar[data-v-
|
|
39242
|
+
.cn-field-list-widget__avatar[data-v-91c65ff8] {
|
|
39243
39243
|
flex: 0 0 auto;
|
|
39244
39244
|
display: inline-flex;
|
|
39245
39245
|
align-items: center;
|
|
@@ -39252,69 +39252,69 @@ button.cn-linked-widget__link[data-v-0fc31606] {
|
|
|
39252
39252
|
font-size: 12px;
|
|
39253
39253
|
font-weight: 700;
|
|
39254
39254
|
}
|
|
39255
|
-
.cn-field-list-widget__main[data-v-
|
|
39255
|
+
.cn-field-list-widget__main[data-v-91c65ff8] {
|
|
39256
39256
|
display: flex;
|
|
39257
39257
|
flex-direction: column;
|
|
39258
39258
|
flex: 1 1 auto;
|
|
39259
39259
|
min-width: 0;
|
|
39260
39260
|
}
|
|
39261
|
-
.cn-field-list-widget__title[data-v-
|
|
39261
|
+
.cn-field-list-widget__title[data-v-91c65ff8] {
|
|
39262
39262
|
font-weight: 600;
|
|
39263
39263
|
overflow-wrap: anywhere;
|
|
39264
39264
|
}
|
|
39265
|
-
.cn-field-list-widget__meta[data-v-
|
|
39266
|
-
.cn-field-list-widget__aside[data-v-
|
|
39267
|
-
.cn-field-list-widget__detail[data-v-
|
|
39268
|
-
.cn-field-list-widget__hint[data-v-
|
|
39269
|
-
.cn-field-list-widget__empty[data-v-
|
|
39265
|
+
.cn-field-list-widget__meta[data-v-91c65ff8],
|
|
39266
|
+
.cn-field-list-widget__aside[data-v-91c65ff8],
|
|
39267
|
+
.cn-field-list-widget__detail[data-v-91c65ff8],
|
|
39268
|
+
.cn-field-list-widget__hint[data-v-91c65ff8],
|
|
39269
|
+
.cn-field-list-widget__empty[data-v-91c65ff8] {
|
|
39270
39270
|
color: var(--color-text-maxcontrast);
|
|
39271
39271
|
}
|
|
39272
|
-
.cn-field-list-widget__meta[data-v-
|
|
39273
|
-
.cn-field-list-widget__aside[data-v-
|
|
39274
|
-
.cn-field-list-widget__copies[data-v-
|
|
39272
|
+
.cn-field-list-widget__meta[data-v-91c65ff8],
|
|
39273
|
+
.cn-field-list-widget__aside[data-v-91c65ff8],
|
|
39274
|
+
.cn-field-list-widget__copies[data-v-91c65ff8] {
|
|
39275
39275
|
display: flex;
|
|
39276
39276
|
flex-wrap: wrap;
|
|
39277
39277
|
gap: 4px;
|
|
39278
39278
|
}
|
|
39279
|
-
.cn-field-list-widget__detail[data-v-
|
|
39279
|
+
.cn-field-list-widget__detail[data-v-91c65ff8] {
|
|
39280
39280
|
font-size: 13px;
|
|
39281
39281
|
}
|
|
39282
|
-
.cn-field-list-widget__aside[data-v-
|
|
39282
|
+
.cn-field-list-widget__aside[data-v-91c65ff8] {
|
|
39283
39283
|
white-space: nowrap;
|
|
39284
39284
|
}
|
|
39285
|
-
.cn-field-list-widget__detail[data-v-
|
|
39286
|
-
.cn-field-list-widget__hint[data-v-
|
|
39287
|
-
.cn-field-list-widget__empty[data-v-
|
|
39285
|
+
.cn-field-list-widget__detail[data-v-91c65ff8],
|
|
39286
|
+
.cn-field-list-widget__hint[data-v-91c65ff8],
|
|
39287
|
+
.cn-field-list-widget__empty[data-v-91c65ff8] {
|
|
39288
39288
|
margin: 4px 0 0;
|
|
39289
39289
|
overflow-wrap: anywhere;
|
|
39290
39290
|
}
|
|
39291
|
-
.cn-field-list-widget__add[data-v-
|
|
39291
|
+
.cn-field-list-widget__add[data-v-91c65ff8] {
|
|
39292
39292
|
display: flex;
|
|
39293
39293
|
flex-wrap: wrap;
|
|
39294
39294
|
align-items: flex-end;
|
|
39295
39295
|
gap: 8px 12px;
|
|
39296
39296
|
}
|
|
39297
|
-
.cn-field-list-widget__add[data-v-
|
|
39297
|
+
.cn-field-list-widget__add[data-v-91c65ff8] > * {
|
|
39298
39298
|
flex: 1 1 180px;
|
|
39299
39299
|
}
|
|
39300
|
-
.cn-field-list-widget__add > button[data-v-
|
|
39300
|
+
.cn-field-list-widget__add > button[data-v-91c65ff8] {
|
|
39301
39301
|
flex: 0 0 auto;
|
|
39302
39302
|
}
|
|
39303
|
-
.cn-field-list-widget__toolbar[data-v-
|
|
39303
|
+
.cn-field-list-widget__toolbar[data-v-91c65ff8] {
|
|
39304
39304
|
display: flex;
|
|
39305
39305
|
justify-content: flex-end;
|
|
39306
39306
|
}
|
|
39307
|
-
.cn-field-list-widget__table-wrap[data-v-
|
|
39307
|
+
.cn-field-list-widget__table-wrap[data-v-91c65ff8] {
|
|
39308
39308
|
display: flex;
|
|
39309
39309
|
flex-direction: column;
|
|
39310
39310
|
gap: 12px;
|
|
39311
39311
|
overflow-x: auto;
|
|
39312
39312
|
}
|
|
39313
|
-
.cn-field-list-widget__table[data-v-
|
|
39313
|
+
.cn-field-list-widget__table[data-v-91c65ff8] {
|
|
39314
39314
|
width: 100%;
|
|
39315
39315
|
border-collapse: collapse;
|
|
39316
39316
|
}
|
|
39317
|
-
.cn-field-list-widget__th[data-v-
|
|
39317
|
+
.cn-field-list-widget__th[data-v-91c65ff8] {
|
|
39318
39318
|
padding: 8px 12px;
|
|
39319
39319
|
text-align: start;
|
|
39320
39320
|
font-size: 13px;
|
|
@@ -39323,31 +39323,31 @@ button.cn-linked-widget__link[data-v-0fc31606] {
|
|
|
39323
39323
|
color: var(--color-text-maxcontrast);
|
|
39324
39324
|
background: var(--color-background-hover);
|
|
39325
39325
|
}
|
|
39326
|
-
.cn-field-list-widget__th--menu[data-v-
|
|
39327
|
-
.cn-field-list-widget__code[data-v-
|
|
39326
|
+
.cn-field-list-widget__th--menu[data-v-91c65ff8],
|
|
39327
|
+
.cn-field-list-widget__code[data-v-91c65ff8] {
|
|
39328
39328
|
font-size: 0.85em;
|
|
39329
39329
|
word-break: break-all;
|
|
39330
39330
|
}
|
|
39331
|
-
.cn-field-list-widget__td--menu[data-v-
|
|
39331
|
+
.cn-field-list-widget__td--menu[data-v-91c65ff8] {
|
|
39332
39332
|
width: 1%;
|
|
39333
39333
|
text-align: end;
|
|
39334
39334
|
}
|
|
39335
|
-
.cn-field-list-widget__tr[data-v-
|
|
39335
|
+
.cn-field-list-widget__tr[data-v-91c65ff8] {
|
|
39336
39336
|
border-top: 1px solid var(--cn-board-hairline, var(--color-border));
|
|
39337
39337
|
}
|
|
39338
|
-
.cn-field-list-widget__td[data-v-
|
|
39338
|
+
.cn-field-list-widget__td[data-v-91c65ff8] {
|
|
39339
39339
|
padding: 10px 12px;
|
|
39340
39340
|
vertical-align: middle;
|
|
39341
39341
|
overflow-wrap: anywhere;
|
|
39342
39342
|
}
|
|
39343
|
-
.cn-field-list-widget__sr[data-v-
|
|
39343
|
+
.cn-field-list-widget__sr[data-v-91c65ff8] {
|
|
39344
39344
|
position: absolute;
|
|
39345
39345
|
width: 1px;
|
|
39346
39346
|
height: 1px;
|
|
39347
39347
|
overflow: hidden;
|
|
39348
39348
|
clip-path: inset(50%);
|
|
39349
39349
|
}
|
|
39350
|
-
.cn-field-list-widget__band[data-v-
|
|
39350
|
+
.cn-field-list-widget__band[data-v-91c65ff8] {
|
|
39351
39351
|
display: flex;
|
|
39352
39352
|
flex-wrap: wrap;
|
|
39353
39353
|
align-items: center;
|
|
@@ -41042,22 +41042,40 @@ a.cn-record-list__inline-title[data-v-5aa15b1d] {
|
|
|
41042
41042
|
}
|
|
41043
41043
|
|
|
41044
41044
|
|
|
41045
|
-
.cn-
|
|
41045
|
+
.cn-party-add[data-v-4157800c] {
|
|
41046
41046
|
display: flex;
|
|
41047
41047
|
flex-direction: column;
|
|
41048
41048
|
gap: calc(var(--default-grid-baseline, 4px) * 3);
|
|
41049
41049
|
}
|
|
41050
|
-
.cn-
|
|
41050
|
+
.cn-party-add__mode[data-v-4157800c] {
|
|
41051
|
+
display: flex;
|
|
41052
|
+
flex-direction: column;
|
|
41053
|
+
margin: 0;
|
|
41054
|
+
padding: 0;
|
|
41055
|
+
border: 0;
|
|
41056
|
+
}
|
|
41057
|
+
.cn-party-add__legend[data-v-4157800c] {
|
|
41058
|
+
margin-bottom: var(--default-grid-baseline, 4px);
|
|
41059
|
+
font-weight: 600;
|
|
41060
|
+
}
|
|
41061
|
+
|
|
41062
|
+
|
|
41063
|
+
.cn-object-parties[data-v-0c4e5c0c] {
|
|
41064
|
+
display: flex;
|
|
41065
|
+
flex-direction: column;
|
|
41066
|
+
gap: calc(var(--default-grid-baseline, 4px) * 3);
|
|
41067
|
+
}
|
|
41068
|
+
.cn-object-parties__verdicts[data-v-0c4e5c0c] {
|
|
41051
41069
|
display: flex;
|
|
41052
41070
|
flex-direction: column;
|
|
41053
41071
|
gap: var(--default-grid-baseline, 4px);
|
|
41054
41072
|
}
|
|
41055
|
-
.cn-object-parties__role-label[data-v-
|
|
41073
|
+
.cn-object-parties__role-label[data-v-0c4e5c0c] {
|
|
41056
41074
|
margin: 0 0 var(--default-grid-baseline, 4px) 0;
|
|
41057
41075
|
color: var(--color-text-maxcontrast);
|
|
41058
41076
|
font-size: 0.9em;
|
|
41059
41077
|
}
|
|
41060
|
-
.cn-object-parties__list[data-v-
|
|
41078
|
+
.cn-object-parties__list[data-v-0c4e5c0c] {
|
|
41061
41079
|
display: flex;
|
|
41062
41080
|
flex-direction: column;
|
|
41063
41081
|
gap: var(--default-grid-baseline, 4px);
|
|
@@ -41065,7 +41083,7 @@ a.cn-record-list__inline-title[data-v-5aa15b1d] {
|
|
|
41065
41083
|
padding: 0;
|
|
41066
41084
|
list-style: none;
|
|
41067
41085
|
}
|
|
41068
|
-
.cn-object-parties__party[data-v-
|
|
41086
|
+
.cn-object-parties__party[data-v-0c4e5c0c] {
|
|
41069
41087
|
display: flex;
|
|
41070
41088
|
flex-wrap: wrap;
|
|
41071
41089
|
align-items: center;
|
|
@@ -41073,26 +41091,33 @@ a.cn-record-list__inline-title[data-v-5aa15b1d] {
|
|
|
41073
41091
|
padding: var(--default-grid-baseline, 4px);
|
|
41074
41092
|
border-radius: var(--border-radius, 4px);
|
|
41075
41093
|
}
|
|
41076
|
-
.cn-object-parties__party[data-v-
|
|
41094
|
+
.cn-object-parties__party[data-v-0c4e5c0c]:hover {
|
|
41077
41095
|
background-color: var(--color-background-hover);
|
|
41078
41096
|
}
|
|
41079
|
-
.cn-object-parties__name[data-v-
|
|
41097
|
+
.cn-object-parties__name[data-v-0c4e5c0c] {
|
|
41080
41098
|
font-weight: bold;
|
|
41081
41099
|
}
|
|
41082
|
-
.cn-object-parties__muted[data-v-
|
|
41100
|
+
.cn-object-parties__muted[data-v-0c4e5c0c] {
|
|
41083
41101
|
color: var(--color-text-maxcontrast);
|
|
41084
41102
|
}
|
|
41085
|
-
.cn-object-
|
|
41103
|
+
.cn-object-parties__manage[data-v-0c4e5c0c] {
|
|
41104
|
+
display: flex;
|
|
41105
|
+
justify-content: flex-end;
|
|
41106
|
+
}
|
|
41107
|
+
.cn-object-parties__remove[data-v-0c4e5c0c] {
|
|
41108
|
+
margin-inline-start: auto;
|
|
41109
|
+
}
|
|
41110
|
+
.cn-object-parties__main-card[data-v-0c4e5c0c] {
|
|
41086
41111
|
display: flex;
|
|
41087
41112
|
flex-direction: column;
|
|
41088
41113
|
gap: calc(var(--default-grid-baseline, 4px) * 3);
|
|
41089
41114
|
}
|
|
41090
|
-
.cn-object-parties__main[data-v-
|
|
41115
|
+
.cn-object-parties__main[data-v-0c4e5c0c] {
|
|
41091
41116
|
display: flex;
|
|
41092
41117
|
align-items: center;
|
|
41093
41118
|
gap: calc(var(--default-grid-baseline, 4px) * 3);
|
|
41094
41119
|
}
|
|
41095
|
-
.cn-object-parties__main-initials[data-v-
|
|
41120
|
+
.cn-object-parties__main-initials[data-v-0c4e5c0c] {
|
|
41096
41121
|
display: flex;
|
|
41097
41122
|
flex: none;
|
|
41098
41123
|
align-items: center;
|
|
@@ -41104,28 +41129,28 @@ a.cn-record-list__inline-title[data-v-5aa15b1d] {
|
|
|
41104
41129
|
color: var(--color-main-text);
|
|
41105
41130
|
font-weight: 700;
|
|
41106
41131
|
}
|
|
41107
|
-
.cn-object-parties__main-text[data-v-
|
|
41132
|
+
.cn-object-parties__main-text[data-v-0c4e5c0c] {
|
|
41108
41133
|
display: flex;
|
|
41109
41134
|
flex-direction: column;
|
|
41110
41135
|
}
|
|
41111
|
-
.cn-object-parties__main-name[data-v-
|
|
41136
|
+
.cn-object-parties__main-name[data-v-0c4e5c0c] {
|
|
41112
41137
|
font-size: 15px;
|
|
41113
41138
|
}
|
|
41114
|
-
.cn-object-parties__main-role[data-v-
|
|
41139
|
+
.cn-object-parties__main-role[data-v-0c4e5c0c] {
|
|
41115
41140
|
font-size: 13px;
|
|
41116
41141
|
}
|
|
41117
|
-
.cn-object-parties__main-email[data-v-
|
|
41142
|
+
.cn-object-parties__main-email[data-v-0c4e5c0c] {
|
|
41118
41143
|
display: flex;
|
|
41119
41144
|
align-items: center;
|
|
41120
41145
|
gap: calc(var(--default-grid-baseline, 4px) * 2.5);
|
|
41121
41146
|
color: var(--color-main-text);
|
|
41122
41147
|
overflow-wrap: anywhere;
|
|
41123
41148
|
}
|
|
41124
|
-
.cn-object-parties__main-link[data-v-
|
|
41149
|
+
.cn-object-parties__main-link[data-v-0c4e5c0c] {
|
|
41125
41150
|
color: var(--color-primary-element);
|
|
41126
41151
|
font-weight: 600;
|
|
41127
41152
|
}
|
|
41128
|
-
.cn-object-parties__accepted[data-v-
|
|
41153
|
+
.cn-object-parties__accepted[data-v-0c4e5c0c] {
|
|
41129
41154
|
display: flex;
|
|
41130
41155
|
flex-wrap: wrap;
|
|
41131
41156
|
align-items: center;
|
|
@@ -41134,10 +41159,10 @@ a.cn-record-list__inline-title[data-v-5aa15b1d] {
|
|
|
41134
41159
|
border-radius: var(--border-radius-large, 10px);
|
|
41135
41160
|
background-color: var(--color-background-hover);
|
|
41136
41161
|
}
|
|
41137
|
-
.cn-object-parties__accepted-label[data-v-
|
|
41162
|
+
.cn-object-parties__accepted-label[data-v-0c4e5c0c] {
|
|
41138
41163
|
font-weight: 600;
|
|
41139
41164
|
}
|
|
41140
|
-
.cn-object-parties__accepted-kind[data-v-
|
|
41165
|
+
.cn-object-parties__accepted-kind[data-v-0c4e5c0c] {
|
|
41141
41166
|
border: 1px solid var(--color-border-dark);
|
|
41142
41167
|
}
|
|
41143
41168
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { translate } from '@nextcloud/l10n';
|
|
2
|
+
import { readPath } from './readPath.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* SPDX-FileCopyrightText: 2026 Conduction B.V.
|
|
@@ -176,5 +177,82 @@ function kindCode(kind) {
|
|
|
176
177
|
return String(kind?.code || kind?.key || '')
|
|
177
178
|
}
|
|
178
179
|
|
|
179
|
-
|
|
180
|
+
/**
|
|
181
|
+
* Write a value at a dotted path, creating the objects on the way.
|
|
182
|
+
*
|
|
183
|
+
* @param {object} target The object written into.
|
|
184
|
+
* @param {string} path The dotted path (`name.surname`).
|
|
185
|
+
* @param {unknown} value The value.
|
|
186
|
+
* @return {void}
|
|
187
|
+
*/
|
|
188
|
+
function writePath(target, path, value) {
|
|
189
|
+
const keys = String(path).split('.').filter((key) => key !== '');
|
|
190
|
+
let node = target;
|
|
191
|
+
keys.slice(0, -1).forEach((key) => {
|
|
192
|
+
if (!node[key] || typeof node[key] !== 'object') {
|
|
193
|
+
node[key] = {};
|
|
194
|
+
}
|
|
195
|
+
node = node[key];
|
|
196
|
+
});
|
|
197
|
+
if (keys.length > 0) {
|
|
198
|
+
node[keys[keys.length - 1]] = value;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* The record a new party is saved as, from the fields a host declares.
|
|
204
|
+
*
|
|
205
|
+
* Each field `{ key, path?, address? }` writes its trimmed value at `path`
|
|
206
|
+
* (default `key`); a field with `address: { path, kind, type }` instead adds
|
|
207
|
+
* `{ kind, type, value }` to the list at that path, the shape OpenRegister's
|
|
208
|
+
* party model reads as the party's addresses. `compose` names the paths a
|
|
209
|
+
* derived field joins with a space, skipping the empty ones
|
|
210
|
+
* (`{ displayName: ["name.givenNames", "name.namePrefix", "name.surname"] }`).
|
|
211
|
+
* A field of `type: "integer"` is saved as a number when it reads as one.
|
|
212
|
+
* An empty value is left out.
|
|
213
|
+
*
|
|
214
|
+
* @param {{fields?: Array<object>, compose?: Record<string, Array<string>>}} create The declaration.
|
|
215
|
+
* @param {Record<string, string>} values The values by field key.
|
|
216
|
+
* @return {object} The record.
|
|
217
|
+
* @spec openspec/changes/object-parties-manage/specs/record-widgets/spec.md#requirement-the-parties-widget-can-add-and-remove-parties
|
|
218
|
+
*/
|
|
219
|
+
function newPartyRecord(create, values) {
|
|
220
|
+
const record = {};
|
|
221
|
+
for (const field of Array.isArray(create?.fields) ? create.fields : []) {
|
|
222
|
+
const value = String(values?.[field?.key] ?? '').trim();
|
|
223
|
+
if (!field || !field.key || value === '') {
|
|
224
|
+
continue
|
|
225
|
+
}
|
|
226
|
+
if (field.address && field.address.path) {
|
|
227
|
+
const list = readPath(record, field.address.path);
|
|
228
|
+
const entry = { kind: field.address.kind || 'correspondence', type: field.address.type || 'email', value };
|
|
229
|
+
writePath(record, field.address.path, [...(Array.isArray(list) ? list : []), entry]);
|
|
230
|
+
continue
|
|
231
|
+
}
|
|
232
|
+
writePath(record, field.path || field.key, field.type === 'integer' && /^-?\d+$/.test(value) ? Number(value) : value);
|
|
233
|
+
}
|
|
234
|
+
for (const [target, paths] of Object.entries(create?.compose && typeof create.compose === 'object' ? create.compose : {})) {
|
|
235
|
+
const joined = (Array.isArray(paths) ? paths : [])
|
|
236
|
+
.map((path) => String(readPath(record, path) ?? '').trim())
|
|
237
|
+
.filter((part) => part !== '')
|
|
238
|
+
.join(' ');
|
|
239
|
+
if (joined !== '') {
|
|
240
|
+
writePath(record, target, joined);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return record
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* The uuid a create answered with: `id`, `uuid` or `@self.id`.
|
|
248
|
+
*
|
|
249
|
+
* @param {object} saved The saved object.
|
|
250
|
+
* @return {string} The uuid, or ''.
|
|
251
|
+
* @spec openspec/changes/object-parties-manage/specs/record-widgets/spec.md#requirement-the-parties-widget-can-add-and-remove-parties
|
|
252
|
+
*/
|
|
253
|
+
function savedUuid(saved) {
|
|
254
|
+
return String(saved?.['@self']?.id || saved?.uuid || saved?.id || '')
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export { documentsOfParty, indicatorVerdict, indicatorsOf, kindCode, newPartyRecord, partiesInOrder, representedByMap, roleLabel, rolesInOrder, savedUuid };
|
|
180
258
|
//# sourceMappingURL=objectParties.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectParties.js","sources":["../../../src/utils/objectParties.js"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2026 Conduction B.V.\n * SPDX-License-Identifier: EUPL-1.2\n *\n * objectParties — reading the parties of a record as OpenRegister's party\n * model answers them (`GET .../objects/{register}/{schema}/{id}/parties`:\n * `{ primary, roles, kinds, byRole, results }`, and `GET .../parties/{uuid}`\n * for one party with its indicators).\n *\n * Pure functions, so CnObjectPartiesWidget and its tests read one shape.\n *\n * @module utils/objectParties\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * What a role is called: the app's own word (`roleLabels`), else the label\n * the listing declares, else the key. `other` is a party with no role.\n *\n * @param {string} key The role key.\n * @param {Array<{key: string, label?: string}>} roles The roles the listing declares.\n * @param {Record<string, string>} [roleLabels] The app's words, by key.\n * @return {string} The label.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function roleLabel(key, roles, roleLabels = {}) {\n\tif (roleLabels && typeof roleLabels[key] === 'string' && roleLabels[key] !== '') {\n\t\treturn roleLabels[key]\n\t}\n\tconst declared = (roles || []).find((role) => role && role.key === key)\n\tif (declared && declared.label) {\n\t\treturn declared.label\n\t}\n\treturn key === 'other' ? t('nextcloud-vue', 'No role') : key\n}\n\n/**\n * The parties of one role, the primary party first.\n *\n * @param {Array<object>} parties The role's rows.\n * @param {string|null} primary The primary party's uuid.\n * @return {Array<object>} The rows.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function partiesInOrder(parties, primary) {\n\tconst rows = Array.isArray(parties) ? parties.filter(Boolean) : []\n\tif (!primary) {\n\t\treturn rows\n\t}\n\treturn [\n\t\t...rows.filter((row) => row.partyUuid === primary),\n\t\t...rows.filter((row) => row.partyUuid !== primary),\n\t]\n}\n\n/**\n * The roles of a listing as groups, the group holding the primary party first.\n *\n * @param {object|null} listing The `/parties` answer.\n * @param {Record<string, string>} [roleLabels] The app's words for the roles.\n * @return {Array<{key: string, label: string, parties: Array<object>}>} The groups.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function rolesInOrder(listing, roleLabels = {}) {\n\tif (!listing || typeof listing !== 'object') {\n\t\treturn []\n\t}\n\tconst byRole = listing.byRole && typeof listing.byRole === 'object' ? listing.byRole : {}\n\tconst primary = listing.primary || null\n\tconst groups = Object.keys(byRole).map((key) => ({\n\t\tkey,\n\t\tlabel: roleLabel(key, listing.roles, roleLabels),\n\t\tparties: partiesInOrder(byRole[key], primary),\n\t}))\n\tconst holdsPrimary = (group) => !!primary && group.parties.some((party) => party.partyUuid === primary)\n\treturn [...groups.filter(holdsPrimary), ...groups.filter((group) => !holdsPrimary(group))]\n}\n\n/**\n * What an indicator means for what may be done: an indicator always carries\n * its verdict, never a bare chip. `refuse-publication` and `refuse-send` are\n * blocking (`error`); anything else asks to be read first (`warning`).\n *\n * @param {object} indicator The indicator (`{ key, label, effect }`).\n * @param {object} [labels] The app's words: `verdictPublication`, `verdictSend`, `verdictWarn`.\n * @return {{effect: string, severity: string, label: string, verdict: string}} The verdict.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function indicatorVerdict(indicator, labels = {}) {\n\tconst effect = String(indicator?.effect || '').trim()\n\tconst label = String(indicator?.label || indicator?.key || '').trim()\n\tif (effect === 'refuse-publication') {\n\t\treturn { effect, severity: 'error', label, verdict: labels.verdictPublication || t('nextcloud-vue', 'Publishing a file on this record is refused') }\n\t}\n\tif (effect === 'refuse-send') {\n\t\treturn { effect, severity: 'error', label, verdict: labels.verdictSend || t('nextcloud-vue', 'A message to this party is refused') }\n\t}\n\treturn { effect: effect === '' ? 'warn' : effect, severity: 'warning', label, verdict: labels.verdictWarn || t('nextcloud-vue', 'Read this before acting on the record') }\n}\n\n/**\n * Every indicator on a set of parties, each knowing whose it is.\n *\n * @param {Array<object>} parties The party records.\n * @return {Array<object>} The indicators with `party` and `partyName`.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function indicatorsOf(parties) {\n\tconst found = []\n\tfor (const party of parties || []) {\n\t\tif (!party) {\n\t\t\tcontinue\n\t\t}\n\t\tfor (const indicator of Array.isArray(party.indicators) ? party.indicators : []) {\n\t\t\tif (indicator) {\n\t\t\t\tfound.push({ ...indicator, party: party.id || party.uuid || '', partyName: party.name || party.displayName || '' })\n\t\t\t}\n\t\t}\n\t}\n\treturn found\n}\n\n/**\n * Who represents whom: participant uuid to the uuid of the party it acts for,\n * read from role rows (`{ participant, representedParty }`).\n *\n * @param {Array<object>|null} rows The role rows.\n * @return {Record<string, string>} The map.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function representedByMap(rows) {\n\tconst map = {}\n\tfor (const row of Array.isArray(rows) ? rows : []) {\n\t\tconst participant = String(row?.participant || '').trim()\n\t\tconst represented = String(row?.representedParty?.id || row?.representedParty || '').trim()\n\t\tif (participant !== '' && represented !== '') {\n\t\t\tmap[participant] = represented\n\t\t}\n\t}\n\treturn map\n}\n\n/**\n * The documents a party sent and received: sender is the party, or the party\n * is among the recipients.\n *\n * @param {Array<object>} documents The documents.\n * @param {string} identifier The party's uuid.\n * @param {{senderField?: string, recipientsField?: string}} [fields] Where a document names them.\n * @return {{sent: Array<object>, received: Array<object>}} The two lists.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function documentsOfParty(documents, identifier, fields = {}) {\n\tconst id = String(identifier || '').trim()\n\tconst rows = Array.isArray(documents) ? documents : []\n\tif (id === '') {\n\t\treturn { sent: [], received: [] }\n\t}\n\tconst sender = fields.senderField || 'sender'\n\tconst recipients = fields.recipientsField || 'recipients'\n\treturn {\n\t\tsent: rows.filter((row) => String(row?.[sender] || '').trim() === id),\n\t\treceived: rows.filter((row) => (Array.isArray(row?.[recipients]) ? row[recipients] : []).map((entry) => String(entry || '').trim()).includes(id)),\n\t}\n}\n\n/**\n * The code of a party kind (`code`, else `key`).\n *\n * @param {object} kind The kind.\n * @return {string} The code.\n */\nexport function kindCode(kind) {\n\treturn String(kind?.code || kind?.key || '')\n}\n"],"names":["t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"objectParties.js","sources":["../../../src/utils/objectParties.js"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2026 Conduction B.V.\n * SPDX-License-Identifier: EUPL-1.2\n *\n * objectParties — reading the parties of a record as OpenRegister's party\n * model answers them (`GET .../objects/{register}/{schema}/{id}/parties`:\n * `{ primary, roles, kinds, byRole, results }`, and `GET .../parties/{uuid}`\n * for one party with its indicators).\n *\n * Pure functions, so CnObjectPartiesWidget and its tests read one shape.\n *\n * @module utils/objectParties\n */\n\nimport { translate as t } from '@nextcloud/l10n'\nimport { readPath } from './readPath.js'\n\n/**\n * What a role is called: the app's own word (`roleLabels`), else the label\n * the listing declares, else the key. `other` is a party with no role.\n *\n * @param {string} key The role key.\n * @param {Array<{key: string, label?: string}>} roles The roles the listing declares.\n * @param {Record<string, string>} [roleLabels] The app's words, by key.\n * @return {string} The label.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function roleLabel(key, roles, roleLabels = {}) {\n\tif (roleLabels && typeof roleLabels[key] === 'string' && roleLabels[key] !== '') {\n\t\treturn roleLabels[key]\n\t}\n\tconst declared = (roles || []).find((role) => role && role.key === key)\n\tif (declared && declared.label) {\n\t\treturn declared.label\n\t}\n\treturn key === 'other' ? t('nextcloud-vue', 'No role') : key\n}\n\n/**\n * The parties of one role, the primary party first.\n *\n * @param {Array<object>} parties The role's rows.\n * @param {string|null} primary The primary party's uuid.\n * @return {Array<object>} The rows.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function partiesInOrder(parties, primary) {\n\tconst rows = Array.isArray(parties) ? parties.filter(Boolean) : []\n\tif (!primary) {\n\t\treturn rows\n\t}\n\treturn [\n\t\t...rows.filter((row) => row.partyUuid === primary),\n\t\t...rows.filter((row) => row.partyUuid !== primary),\n\t]\n}\n\n/**\n * The roles of a listing as groups, the group holding the primary party first.\n *\n * @param {object|null} listing The `/parties` answer.\n * @param {Record<string, string>} [roleLabels] The app's words for the roles.\n * @return {Array<{key: string, label: string, parties: Array<object>}>} The groups.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function rolesInOrder(listing, roleLabels = {}) {\n\tif (!listing || typeof listing !== 'object') {\n\t\treturn []\n\t}\n\tconst byRole = listing.byRole && typeof listing.byRole === 'object' ? listing.byRole : {}\n\tconst primary = listing.primary || null\n\tconst groups = Object.keys(byRole).map((key) => ({\n\t\tkey,\n\t\tlabel: roleLabel(key, listing.roles, roleLabels),\n\t\tparties: partiesInOrder(byRole[key], primary),\n\t}))\n\tconst holdsPrimary = (group) => !!primary && group.parties.some((party) => party.partyUuid === primary)\n\treturn [...groups.filter(holdsPrimary), ...groups.filter((group) => !holdsPrimary(group))]\n}\n\n/**\n * What an indicator means for what may be done: an indicator always carries\n * its verdict, never a bare chip. `refuse-publication` and `refuse-send` are\n * blocking (`error`); anything else asks to be read first (`warning`).\n *\n * @param {object} indicator The indicator (`{ key, label, effect }`).\n * @param {object} [labels] The app's words: `verdictPublication`, `verdictSend`, `verdictWarn`.\n * @return {{effect: string, severity: string, label: string, verdict: string}} The verdict.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function indicatorVerdict(indicator, labels = {}) {\n\tconst effect = String(indicator?.effect || '').trim()\n\tconst label = String(indicator?.label || indicator?.key || '').trim()\n\tif (effect === 'refuse-publication') {\n\t\treturn { effect, severity: 'error', label, verdict: labels.verdictPublication || t('nextcloud-vue', 'Publishing a file on this record is refused') }\n\t}\n\tif (effect === 'refuse-send') {\n\t\treturn { effect, severity: 'error', label, verdict: labels.verdictSend || t('nextcloud-vue', 'A message to this party is refused') }\n\t}\n\treturn { effect: effect === '' ? 'warn' : effect, severity: 'warning', label, verdict: labels.verdictWarn || t('nextcloud-vue', 'Read this before acting on the record') }\n}\n\n/**\n * Every indicator on a set of parties, each knowing whose it is.\n *\n * @param {Array<object>} parties The party records.\n * @return {Array<object>} The indicators with `party` and `partyName`.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function indicatorsOf(parties) {\n\tconst found = []\n\tfor (const party of parties || []) {\n\t\tif (!party) {\n\t\t\tcontinue\n\t\t}\n\t\tfor (const indicator of Array.isArray(party.indicators) ? party.indicators : []) {\n\t\t\tif (indicator) {\n\t\t\t\tfound.push({ ...indicator, party: party.id || party.uuid || '', partyName: party.name || party.displayName || '' })\n\t\t\t}\n\t\t}\n\t}\n\treturn found\n}\n\n/**\n * Who represents whom: participant uuid to the uuid of the party it acts for,\n * read from role rows (`{ participant, representedParty }`).\n *\n * @param {Array<object>|null} rows The role rows.\n * @return {Record<string, string>} The map.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function representedByMap(rows) {\n\tconst map = {}\n\tfor (const row of Array.isArray(rows) ? rows : []) {\n\t\tconst participant = String(row?.participant || '').trim()\n\t\tconst represented = String(row?.representedParty?.id || row?.representedParty || '').trim()\n\t\tif (participant !== '' && represented !== '') {\n\t\t\tmap[participant] = represented\n\t\t}\n\t}\n\treturn map\n}\n\n/**\n * The documents a party sent and received: sender is the party, or the party\n * is among the recipients.\n *\n * @param {Array<object>} documents The documents.\n * @param {string} identifier The party's uuid.\n * @param {{senderField?: string, recipientsField?: string}} [fields] Where a document names them.\n * @return {{sent: Array<object>, received: Array<object>}} The two lists.\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport function documentsOfParty(documents, identifier, fields = {}) {\n\tconst id = String(identifier || '').trim()\n\tconst rows = Array.isArray(documents) ? documents : []\n\tif (id === '') {\n\t\treturn { sent: [], received: [] }\n\t}\n\tconst sender = fields.senderField || 'sender'\n\tconst recipients = fields.recipientsField || 'recipients'\n\treturn {\n\t\tsent: rows.filter((row) => String(row?.[sender] || '').trim() === id),\n\t\treceived: rows.filter((row) => (Array.isArray(row?.[recipients]) ? row[recipients] : []).map((entry) => String(entry || '').trim()).includes(id)),\n\t}\n}\n\n/**\n * The code of a party kind (`code`, else `key`).\n *\n * @param {object} kind The kind.\n * @return {string} The code.\n */\nexport function kindCode(kind) {\n\treturn String(kind?.code || kind?.key || '')\n}\n\n/**\n * Write a value at a dotted path, creating the objects on the way.\n *\n * @param {object} target The object written into.\n * @param {string} path The dotted path (`name.surname`).\n * @param {unknown} value The value.\n * @return {void}\n */\nfunction writePath(target, path, value) {\n\tconst keys = String(path).split('.').filter((key) => key !== '')\n\tlet node = target\n\tkeys.slice(0, -1).forEach((key) => {\n\t\tif (!node[key] || typeof node[key] !== 'object') {\n\t\t\tnode[key] = {}\n\t\t}\n\t\tnode = node[key]\n\t})\n\tif (keys.length > 0) {\n\t\tnode[keys[keys.length - 1]] = value\n\t}\n}\n\n/**\n * The record a new party is saved as, from the fields a host declares.\n *\n * Each field `{ key, path?, address? }` writes its trimmed value at `path`\n * (default `key`); a field with `address: { path, kind, type }` instead adds\n * `{ kind, type, value }` to the list at that path, the shape OpenRegister's\n * party model reads as the party's addresses. `compose` names the paths a\n * derived field joins with a space, skipping the empty ones\n * (`{ displayName: [\"name.givenNames\", \"name.namePrefix\", \"name.surname\"] }`).\n * A field of `type: \"integer\"` is saved as a number when it reads as one.\n * An empty value is left out.\n *\n * @param {{fields?: Array<object>, compose?: Record<string, Array<string>>}} create The declaration.\n * @param {Record<string, string>} values The values by field key.\n * @return {object} The record.\n * @spec openspec/changes/object-parties-manage/specs/record-widgets/spec.md#requirement-the-parties-widget-can-add-and-remove-parties\n */\nexport function newPartyRecord(create, values) {\n\tconst record = {}\n\tfor (const field of Array.isArray(create?.fields) ? create.fields : []) {\n\t\tconst value = String(values?.[field?.key] ?? '').trim()\n\t\tif (!field || !field.key || value === '') {\n\t\t\tcontinue\n\t\t}\n\t\tif (field.address && field.address.path) {\n\t\t\tconst list = readPath(record, field.address.path)\n\t\t\tconst entry = { kind: field.address.kind || 'correspondence', type: field.address.type || 'email', value }\n\t\t\twritePath(record, field.address.path, [...(Array.isArray(list) ? list : []), entry])\n\t\t\tcontinue\n\t\t}\n\t\twritePath(record, field.path || field.key, field.type === 'integer' && /^-?\\d+$/.test(value) ? Number(value) : value)\n\t}\n\tfor (const [target, paths] of Object.entries(create?.compose && typeof create.compose === 'object' ? create.compose : {})) {\n\t\tconst joined = (Array.isArray(paths) ? paths : [])\n\t\t\t.map((path) => String(readPath(record, path) ?? '').trim())\n\t\t\t.filter((part) => part !== '')\n\t\t\t.join(' ')\n\t\tif (joined !== '') {\n\t\t\twritePath(record, target, joined)\n\t\t}\n\t}\n\treturn record\n}\n\n/**\n * The uuid a create answered with: `id`, `uuid` or `@self.id`.\n *\n * @param {object} saved The saved object.\n * @return {string} The uuid, or ''.\n * @spec openspec/changes/object-parties-manage/specs/record-widgets/spec.md#requirement-the-parties-widget-can-add-and-remove-parties\n */\nexport function savedUuid(saved) {\n\treturn String(saved?.['@self']?.id || saved?.uuid || saved?.id || '')\n}\n"],"names":["t"],"mappings":"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"}
|