@conduction/nextcloud-vue 2.108.0 → 2.110.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/CnActionDialog/CnActionDialog.vue.js +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +115 -12
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +36 -9
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnAddressSearch/CnAddressSearch.vue.js +10 -0
- package/dist/esm/components/CnAddressSearch/CnAddressSearch.vue.js.map +1 -0
- package/dist/esm/components/CnAddressSearch/CnAddressSearch.vue2.js +305 -0
- package/dist/esm/components/CnAddressSearch/CnAddressSearch.vue2.js.map +1 -0
- package/dist/esm/components/CnAddressSearch/CnAddressSearch.vue3.js +38 -0
- package/dist/esm/components/CnAddressSearch/CnAddressSearch.vue3.js.map +1 -0
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue.js +10 -0
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue.js.map +1 -0
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue2.js +398 -0
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue2.js.map +1 -0
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue3.js +155 -0
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue3.js.map +1 -0
- package/dist/esm/components/CnDecisionListWidget/CnDecisionListWidget.vue.js +9 -0
- package/dist/esm/components/CnDecisionListWidget/CnDecisionListWidget.vue.js.map +1 -0
- package/dist/esm/components/CnDecisionListWidget/CnDecisionListWidget.vue2.js +281 -0
- package/dist/esm/components/CnDecisionListWidget/CnDecisionListWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnDecisionListWidget/CnDecisionListWidget.vue3.js +137 -0
- package/dist/esm/components/CnDecisionListWidget/CnDecisionListWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnDuplicateWarning/CnDuplicateWarning.vue.js +9 -0
- package/dist/esm/components/CnDuplicateWarning/CnDuplicateWarning.vue.js.map +1 -0
- package/dist/esm/components/CnDuplicateWarning/CnDuplicateWarning.vue2.js +225 -0
- package/dist/esm/components/CnDuplicateWarning/CnDuplicateWarning.vue2.js.map +1 -0
- package/dist/esm/components/CnDuplicateWarning/CnDuplicateWarning.vue3.js +110 -0
- package/dist/esm/components/CnDuplicateWarning/CnDuplicateWarning.vue3.js.map +1 -0
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue.js +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +19 -3
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +30 -0
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +513 -481
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue.js +9 -0
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue.js.map +1 -0
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue2.js +181 -0
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue2.js.map +1 -0
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue3.js +50 -0
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue3.js.map +1 -0
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue.js +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +102 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +6 -6
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnPlanWidget/CnPlanWidget.vue.js +9 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidget.vue.js.map +1 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidget.vue2.js +190 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidget.vue3.js +91 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue.js +9 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue.js.map +1 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue2.js +64 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue2.js.map +1 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js +49 -0
- package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js.map +1 -0
- package/dist/esm/components/CnRedactionEditor/CnRedactionEditor.vue.js +9 -0
- package/dist/esm/components/CnRedactionEditor/CnRedactionEditor.vue.js.map +1 -0
- package/dist/esm/components/CnRedactionEditor/CnRedactionEditor.vue2.js +382 -0
- package/dist/esm/components/CnRedactionEditor/CnRedactionEditor.vue2.js.map +1 -0
- package/dist/esm/components/CnRedactionEditor/CnRedactionEditor.vue3.js +285 -0
- package/dist/esm/components/CnRedactionEditor/CnRedactionEditor.vue3.js.map +1 -0
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +9 -0
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js.map +1 -0
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js +277 -0
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js +183 -0
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnWidgetGrid/builtInWidgets.js +16 -14
- package/dist/esm/components/CnWidgetGrid/builtInWidgets.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +53 -22
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue.js +9 -0
- package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue.js.map +1 -0
- package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue2.js +253 -0
- package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue2.js.map +1 -0
- package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue3.js +197 -0
- package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue3.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +106 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +105 -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 +510 -76
- package/dist/esm/utils/actionsDispatcher.js +11 -3
- package/dist/esm/utils/actionsDispatcher.js.map +1 -1
- package/dist/esm/utils/builtInModals.js +3 -1
- package/dist/esm/utils/builtInModals.js.map +1 -1
- package/dist/esm/utils/duplicateWarning.js +62 -0
- package/dist/esm/utils/duplicateWarning.js.map +1 -0
- package/dist/esm/utils/errors.js +4 -0
- package/dist/esm/utils/errors.js.map +1 -1
- package/dist/esm/utils/libraryWidgetKeys.js +4 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/openDuplicateWarning.js +39 -0
- package/dist/esm/utils/openDuplicateWarning.js.map +1 -0
- package/dist/esm/utils/optionsFrom.js +69 -2
- package/dist/esm/utils/optionsFrom.js.map +1 -1
- package/dist/esm/utils/planTree.js +57 -0
- package/dist/esm/utils/planTree.js.map +1 -0
- package/dist/esm/utils/redactionSegments.js +53 -0
- package/dist/esm/utils/redactionSegments.js.map +1 -0
- package/dist/esm/utils/registerNcDashboardWidgets.js +61 -0
- package/dist/esm/utils/registerNcDashboardWidgets.js.map +1 -0
- package/dist/esm/utils/searchRefusal.js +62 -0
- package/dist/esm/utils/searchRefusal.js.map +1 -0
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +17560 -12844
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +510 -76
- package/l10n/en.json +106 -1
- package/l10n/nl.json +105 -1
- package/package.json +1 -1
- package/src/components/CnActionDialog/CnActionDialog.vue +134 -13
- package/src/components/CnAddressSearch/CnAddressSearch.vue +343 -0
- package/src/components/CnAddressSearch/index.js +12 -0
- package/src/components/CnAssignDialog/CnAssignDialog.vue +525 -0
- package/src/components/CnAssignDialog/index.js +12 -0
- package/src/components/CnDecisionListWidget/CnDecisionListWidget.vue +388 -0
- package/src/components/CnDecisionListWidget/index.js +12 -0
- package/src/components/CnDuplicateWarning/CnDuplicateWarning.vue +318 -0
- package/src/components/CnDuplicateWarning/index.js +12 -0
- package/src/components/CnFormDialog/CnFormDialog.vue +19 -3
- package/src/components/CnIndexPage/CnIndexPage.vue +52 -0
- package/src/components/CnNcDashboardList/CnNcDashboardList.vue +218 -0
- package/src/components/CnNcDashboardList/index.js +12 -0
- package/src/components/CnObjectListWidget/CnObjectListWidget.vue +107 -6
- package/src/components/CnPlanWidget/CnPlanWidget.vue +246 -0
- package/src/components/CnPlanWidget/CnPlanWidgetRow.vue +117 -0
- package/src/components/CnPlanWidget/index.js +12 -0
- package/src/components/CnRedactionEditor/CnRedactionEditor.vue +655 -0
- package/src/components/CnRedactionEditor/index.js +13 -0
- package/src/components/CnRetentionWidget/CnRetentionWidget.vue +413 -0
- package/src/components/CnRetentionWidget/index.js +12 -0
- package/src/components/CnWidgetGrid/builtInWidgets.js +2 -0
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +31 -0
- package/src/components/CnWorkQueue/CnWorkQueue.vue +463 -0
- package/src/components/CnWorkQueue/index.js +12 -0
- package/src/components/index.js +9 -0
- package/src/css/index-page.css +24 -0
- package/src/index.js +12 -0
- package/src/schemas/app-manifest-v2.schema.json +119 -3
- package/src/utils/actionsDispatcher.js +10 -2
- package/src/utils/builtInModals.js +3 -1
- package/src/utils/duplicateWarning.js +59 -0
- package/src/utils/errors.js +4 -0
- package/src/utils/libraryWidgetKeys.js +4 -0
- package/src/utils/openDuplicateWarning.js +35 -0
- package/src/utils/optionsFrom.js +68 -1
- package/src/utils/planTree.js +54 -0
- package/src/utils/redactionSegments.js +50 -0
- package/src/utils/registerNcDashboardWidgets.js +57 -0
- package/src/utils/searchRefusal.js +59 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
package/l10n/en.json
CHANGED
|
@@ -1815,7 +1815,104 @@
|
|
|
1815
1815
|
"{name} moved to place {place} of {total}": "{name} moved to place {place} of {total}",
|
|
1816
1816
|
"The new order could not be saved.": "The new order could not be saved.",
|
|
1817
1817
|
"{field} is already used; choose another value.": "{field} is already used; choose another value.",
|
|
1818
|
-
"One per line": "One per line"
|
|
1818
|
+
"One per line": "One per line",
|
|
1819
|
+
"This may already exist": "This may already exist",
|
|
1820
|
+
"Why file it anyway": "Why file it anyway",
|
|
1821
|
+
"This cannot be filed twice. Open the one it matches, or ask a coordinator.": "This cannot be filed twice. Open the one it matches, or ask a coordinator.",
|
|
1822
|
+
"File it anyway": "File it anyway",
|
|
1823
|
+
"A record you may not open": "A record you may not open",
|
|
1824
|
+
"Matched on the score, not on a single field": "Matched on the score, not on a single field",
|
|
1825
|
+
"This list could not be read": "This list could not be read",
|
|
1826
|
+
"Try again": "Try again",
|
|
1827
|
+
"Nothing to decide right now.": "Nothing to decide right now.",
|
|
1828
|
+
"Your answer": "Your answer",
|
|
1829
|
+
"Why?": "Why?",
|
|
1830
|
+
"Record this decision": "Record this decision",
|
|
1831
|
+
"This decision was not recorded.": "This decision was not recorded.",
|
|
1832
|
+
"This search could not be read from character {position}.": "This search could not be read from character {position}.",
|
|
1833
|
+
"Correct that character, or search for plain words. AND, OR and NOT work in capitals, and quotes make a phrase.": "Correct that character, or search for plain words. AND, OR and NOT work in capitals, and quotes make a phrase.",
|
|
1834
|
+
"This list could not be read.": "This list could not be read.",
|
|
1835
|
+
"Nothing to show": "Nothing to show",
|
|
1836
|
+
"What happens to this record once it is closed": "What happens to this record once it is closed",
|
|
1837
|
+
"The archival facts are unavailable": "The archival facts are unavailable",
|
|
1838
|
+
"Archived on {at} by {by}. {reason}": "Archived on {at} by {by}. {reason}",
|
|
1839
|
+
"This record and OpenRegister do not agree on whether it is archived.": "This record and OpenRegister do not agree on whether it is archived.",
|
|
1840
|
+
"Nothing could decide what happens to this record.": "Nothing could decide what happens to this record.",
|
|
1841
|
+
"This record has not been closed yet. Its archival future is recorded when it closes.": "This record has not been closed yet. Its archival future is recorded when it closes.",
|
|
1842
|
+
"Handed over as {kind} on {at} by {by}.": "Handed over as {kind} on {at} by {by}.",
|
|
1843
|
+
"Transfer list": "Transfer list",
|
|
1844
|
+
"Recomputing needs the archivist role": "Recomputing needs the archivist role",
|
|
1845
|
+
"Why are you recomputing this?": "Why are you recomputing this?",
|
|
1846
|
+
"This is recorded against {user}.": "This is recorded against {user}.",
|
|
1847
|
+
"Recompute the nomination": "Recompute the nomination",
|
|
1848
|
+
"Selection list row": "Selection list row",
|
|
1849
|
+
"Decided by": "Decided by",
|
|
1850
|
+
"Written on": "Written on",
|
|
1851
|
+
"Decided when it closes": "Decided when it closes",
|
|
1852
|
+
"Not yet": "Not yet",
|
|
1853
|
+
"This widget has no record to read.": "This widget has no record to read.",
|
|
1854
|
+
"The plan is unavailable": "The plan is unavailable",
|
|
1855
|
+
"This record has no plan": "This record has no plan",
|
|
1856
|
+
"You are not allowed to see this plan.": "You are not allowed to see this plan.",
|
|
1857
|
+
"The plan could not be loaded. Try again.": "The plan could not be loaded. Try again.",
|
|
1858
|
+
"Start": "Start",
|
|
1859
|
+
"Stop": "Stop",
|
|
1860
|
+
"Can start": "Can start",
|
|
1861
|
+
"Stopped": "Stopped",
|
|
1862
|
+
"Not needed": "Not needed",
|
|
1863
|
+
"Search an address": "Search an address",
|
|
1864
|
+
"Street, postcode or place": "Street, postcode or place",
|
|
1865
|
+
"Address search is not available right now.": "Address search is not available right now.",
|
|
1866
|
+
"Address": "Address",
|
|
1867
|
+
"Street": "Street",
|
|
1868
|
+
"Place": "Place",
|
|
1869
|
+
"Postcode": "Postcode",
|
|
1870
|
+
"{source} could not be read, so this list is incomplete.": "{source} could not be read, so this list is incomplete.",
|
|
1871
|
+
"This queue could not be read": "This queue could not be read",
|
|
1872
|
+
"Nothing is waiting on you.": "Nothing is waiting on you.",
|
|
1873
|
+
"Hide this group until tomorrow": "Hide this group until tomorrow",
|
|
1874
|
+
"Hide until tomorrow": "Hide until tomorrow",
|
|
1875
|
+
"Covering for {person}": "Covering for {person}",
|
|
1876
|
+
"Hidden until tomorrow": "Hidden until tomorrow",
|
|
1877
|
+
"Show {group} again": "Show {group} again",
|
|
1878
|
+
"the applicant": "the applicant",
|
|
1879
|
+
"a third party": "a third party",
|
|
1880
|
+
"us": "us",
|
|
1881
|
+
"Waiting on {party} for {days} days": "Waiting on {party} for {days} days",
|
|
1882
|
+
"Waiting on {party} for {days} days, chased once": "Waiting on {party} for {days} days, chased once",
|
|
1883
|
+
"Waiting on {party} for {days} days, chased {chases} times": "Waiting on {party} for {days} days, chased {chases} times",
|
|
1884
|
+
"Previous document": "Previous document",
|
|
1885
|
+
"Next document": "Next document",
|
|
1886
|
+
"Record redaction": "Record redaction",
|
|
1887
|
+
"No document here needs redacting.": "No document here needs redacting.",
|
|
1888
|
+
"Document {index} of {count}": "Document {index} of {count}",
|
|
1889
|
+
"Redacted copy recorded": "Redacted copy recorded",
|
|
1890
|
+
"Upload redacted version": "Upload redacted version",
|
|
1891
|
+
"Document without a title": "Document without a title",
|
|
1892
|
+
"Finding the passages to redact…": "Finding the passages to redact…",
|
|
1893
|
+
"No text was extracted from this document.": "No text was extracted from this document.",
|
|
1894
|
+
"Proposal": "Proposal",
|
|
1895
|
+
"Always redacted by rule": "Always redacted by rule",
|
|
1896
|
+
"Verdict for {passage}": "Verdict for {passage}",
|
|
1897
|
+
"Passage type": "Passage type",
|
|
1898
|
+
"Passage text": "Passage text",
|
|
1899
|
+
"Add passage": "Add passage",
|
|
1900
|
+
"Redact: {title}": "Redact: {title}",
|
|
1901
|
+
"Redact documents": "Redact documents",
|
|
1902
|
+
"Agreed": "Agreed",
|
|
1903
|
+
"Adjust": "Adjust",
|
|
1904
|
+
"Do not redact": "Do not redact",
|
|
1905
|
+
"The documents could not be read.": "The documents could not be read.",
|
|
1906
|
+
"The passages of this document could not be found. Upload a redacted version instead.": "The passages of this document could not be found. Upload a redacted version instead.",
|
|
1907
|
+
"The redacted copy could not be made. Upload a redacted version instead.": "The redacted copy could not be made. Upload a redacted version instead.",
|
|
1908
|
+
"The redacted version could not be stored. Try again.": "The redacted version could not be stored. Try again.",
|
|
1909
|
+
"The redacted copy is recorded. Only this copy will be published.": "The redacted copy is recorded. Only this copy will be published.",
|
|
1910
|
+
"Assign": "Assign",
|
|
1911
|
+
"New handler": "New handler",
|
|
1912
|
+
"New team": "New team",
|
|
1913
|
+
"Why it is moving": "Why it is moving",
|
|
1914
|
+
"Use \"{name}\"": "Use \"{name}\"",
|
|
1915
|
+
"It was not handed over.": "It was not handed over."
|
|
1819
1916
|
},
|
|
1820
1917
|
"plurals": {
|
|
1821
1918
|
"{count} member": [
|
|
@@ -1937,6 +2034,14 @@
|
|
|
1937
2034
|
"{count} open": [
|
|
1938
2035
|
"{count} open",
|
|
1939
2036
|
"{count} open"
|
|
2037
|
+
],
|
|
2038
|
+
"%n existing record looks like this one.": [
|
|
2039
|
+
"%n existing record looks like this one.",
|
|
2040
|
+
"%n existing records look like this one."
|
|
2041
|
+
],
|
|
2042
|
+
"%n passage found. Review each one.": [
|
|
2043
|
+
"%n passage found. Review each one.",
|
|
2044
|
+
"%n passages found. Review each one."
|
|
1940
2045
|
]
|
|
1941
2046
|
}
|
|
1942
2047
|
}
|
package/l10n/nl.json
CHANGED
|
@@ -2028,7 +2028,103 @@
|
|
|
2028
2028
|
"{name} moved to place {place} of {total}": "{name} staat nu op plaats {place} van {total}",
|
|
2029
2029
|
"The new order could not be saved.": "De nieuwe volgorde kon niet worden opgeslagen.",
|
|
2030
2030
|
"{field} is already used; choose another value.": "{field} is al in gebruik; kies een andere waarde.",
|
|
2031
|
-
"One per line": "Eén per regel"
|
|
2031
|
+
"One per line": "Eén per regel",
|
|
2032
|
+
"This may already exist": "Dit bestaat mogelijk al",
|
|
2033
|
+
"Why file it anyway": "Waarom toch vastleggen",
|
|
2034
|
+
"This cannot be filed twice. Open the one it matches, or ask a coordinator.": "Dit kan niet twee keer worden vastgelegd. Open het item waarmee het overeenkomt, of vraag een coördinator.",
|
|
2035
|
+
"File it anyway": "Toch vastleggen",
|
|
2036
|
+
"A record you may not open": "Een item dat je niet mag openen",
|
|
2037
|
+
"Matched on the score, not on a single field": "Gevonden op de score, niet op één veld",
|
|
2038
|
+
"This list could not be read": "Deze lijst kon niet worden gelezen",
|
|
2039
|
+
"Nothing to decide right now.": "Er is nu niets te beslissen.",
|
|
2040
|
+
"Your answer": "Je antwoord",
|
|
2041
|
+
"Why?": "Waarom?",
|
|
2042
|
+
"Record this decision": "Dit besluit vastleggen",
|
|
2043
|
+
"This decision was not recorded.": "Dit besluit is niet vastgelegd.",
|
|
2044
|
+
"This search could not be read from character {position}.": "Deze zoekopdracht kon niet worden gelezen vanaf teken {position}.",
|
|
2045
|
+
"Correct that character, or search for plain words. AND, OR and NOT work in capitals, and quotes make a phrase.": "Verbeter dat teken, of zoek op gewone woorden. AND, OR en NOT werken in hoofdletters, en aanhalingstekens maken een zinsdeel.",
|
|
2046
|
+
"This list could not be read.": "Deze lijst kon niet worden gelezen.",
|
|
2047
|
+
"Nothing to show": "Niets om te tonen",
|
|
2048
|
+
"What happens to this record once it is closed": "Wat er met dit item gebeurt als het is afgesloten",
|
|
2049
|
+
"The archival facts are unavailable": "De archiefgegevens zijn niet beschikbaar",
|
|
2050
|
+
"Archived on {at} by {by}. {reason}": "Gearchiveerd op {at} door {by}. {reason}",
|
|
2051
|
+
"This record and OpenRegister do not agree on whether it is archived.": "Dit item en OpenRegister zijn het niet eens over of het gearchiveerd is.",
|
|
2052
|
+
"Nothing could decide what happens to this record.": "Niets kon bepalen wat er met dit item gebeurt.",
|
|
2053
|
+
"This record has not been closed yet. Its archival future is recorded when it closes.": "Dit item is nog niet afgesloten. Wat ermee gebeurt wordt vastgelegd als het sluit.",
|
|
2054
|
+
"Handed over as {kind} on {at} by {by}.": "Overgedragen als {kind} op {at} door {by}.",
|
|
2055
|
+
"Transfer list": "Overbrengingslijst",
|
|
2056
|
+
"Recomputing needs the archivist role": "Opnieuw berekenen vraagt de rol archivaris",
|
|
2057
|
+
"Why are you recomputing this?": "Waarom bereken je dit opnieuw?",
|
|
2058
|
+
"This is recorded against {user}.": "Dit wordt vastgelegd op naam van {user}.",
|
|
2059
|
+
"Recompute the nomination": "Bereken de nominatie opnieuw",
|
|
2060
|
+
"Selection list row": "Selectielijstregel",
|
|
2061
|
+
"Decided by": "Bepaald door",
|
|
2062
|
+
"Written on": "Vastgelegd op",
|
|
2063
|
+
"Decided when it closes": "Bepaald bij afsluiten",
|
|
2064
|
+
"Not yet": "Nog niet",
|
|
2065
|
+
"This widget has no record to read.": "Deze widget heeft geen item om te lezen.",
|
|
2066
|
+
"The plan is unavailable": "Het plan is niet beschikbaar",
|
|
2067
|
+
"This record has no plan": "Dit item heeft geen plan",
|
|
2068
|
+
"You are not allowed to see this plan.": "Je mag dit plan niet zien.",
|
|
2069
|
+
"The plan could not be loaded. Try again.": "Het plan kon niet worden geladen. Probeer het opnieuw.",
|
|
2070
|
+
"Start": "Starten",
|
|
2071
|
+
"Stop": "Stoppen",
|
|
2072
|
+
"Can start": "Kan starten",
|
|
2073
|
+
"Stopped": "Gestopt",
|
|
2074
|
+
"Not needed": "Niet nodig",
|
|
2075
|
+
"Search an address": "Zoek een adres",
|
|
2076
|
+
"Street, postcode or place": "Straat, postcode of plaats",
|
|
2077
|
+
"Address search is not available right now.": "Adres zoeken is nu niet beschikbaar.",
|
|
2078
|
+
"Address": "Adres",
|
|
2079
|
+
"Street": "Straat",
|
|
2080
|
+
"Place": "Plaats",
|
|
2081
|
+
"Postcode": "Postcode",
|
|
2082
|
+
"{source} could not be read, so this list is incomplete.": "{source} kon niet worden gelezen, dus deze lijst is niet compleet.",
|
|
2083
|
+
"This queue could not be read": "Deze wachtrij kon niet worden gelezen",
|
|
2084
|
+
"Nothing is waiting on you.": "Er wacht niets op je.",
|
|
2085
|
+
"Hide this group until tomorrow": "Verberg deze groep tot morgen",
|
|
2086
|
+
"Hide until tomorrow": "Verberg tot morgen",
|
|
2087
|
+
"Covering for {person}": "Waarneming voor {person}",
|
|
2088
|
+
"Hidden until tomorrow": "Verborgen tot morgen",
|
|
2089
|
+
"Show {group} again": "{group} weer tonen",
|
|
2090
|
+
"the applicant": "de aanvrager",
|
|
2091
|
+
"a third party": "een derde",
|
|
2092
|
+
"us": "ons",
|
|
2093
|
+
"Waiting on {party} for {days} days": "Wacht {days} dagen op {party}",
|
|
2094
|
+
"Waiting on {party} for {days} days, chased once": "Wacht {days} dagen op {party}, één keer gerappelleerd",
|
|
2095
|
+
"Waiting on {party} for {days} days, chased {chases} times": "Wacht {days} dagen op {party}, {chases} keer gerappelleerd",
|
|
2096
|
+
"Previous document": "Vorig document",
|
|
2097
|
+
"Next document": "Volgend document",
|
|
2098
|
+
"Record redaction": "Lakken vastleggen",
|
|
2099
|
+
"No document here needs redacting.": "Hier hoeft geen document gelakt te worden.",
|
|
2100
|
+
"Document {index} of {count}": "Document {index} van {count}",
|
|
2101
|
+
"Redacted copy recorded": "Gelakte kopie vastgelegd",
|
|
2102
|
+
"Upload redacted version": "Gelakte versie uploaden",
|
|
2103
|
+
"Document without a title": "Document zonder titel",
|
|
2104
|
+
"Finding the passages to redact…": "De te lakken passages worden gezocht…",
|
|
2105
|
+
"No text was extracted from this document.": "Uit dit document is geen tekst gehaald.",
|
|
2106
|
+
"Proposal": "Voorstel",
|
|
2107
|
+
"Always redacted by rule": "Altijd gelakt volgens regel",
|
|
2108
|
+
"Verdict for {passage}": "Oordeel over {passage}",
|
|
2109
|
+
"Passage type": "Soort passage",
|
|
2110
|
+
"Passage text": "Tekst van de passage",
|
|
2111
|
+
"Add passage": "Passage toevoegen",
|
|
2112
|
+
"Redact: {title}": "Lakken: {title}",
|
|
2113
|
+
"Redact documents": "Documenten lakken",
|
|
2114
|
+
"Agreed": "Akkoord",
|
|
2115
|
+
"Adjust": "Aanpassen",
|
|
2116
|
+
"Do not redact": "Niet lakken",
|
|
2117
|
+
"The documents could not be read.": "De documenten konden niet worden gelezen.",
|
|
2118
|
+
"The passages of this document could not be found. Upload a redacted version instead.": "De passages van dit document konden niet worden gevonden. Upload in plaats daarvan een gelakte versie.",
|
|
2119
|
+
"The redacted copy could not be made. Upload a redacted version instead.": "De gelakte kopie kon niet worden gemaakt. Upload in plaats daarvan een gelakte versie.",
|
|
2120
|
+
"The redacted version could not be stored. Try again.": "De gelakte versie kon niet worden opgeslagen. Probeer het opnieuw.",
|
|
2121
|
+
"The redacted copy is recorded. Only this copy will be published.": "De gelakte kopie is vastgelegd. Alleen deze kopie wordt gepubliceerd.",
|
|
2122
|
+
"Assign": "Toewijzen",
|
|
2123
|
+
"New handler": "Nieuwe behandelaar",
|
|
2124
|
+
"New team": "Nieuw team",
|
|
2125
|
+
"Why it is moving": "Waarom het overgaat",
|
|
2126
|
+
"Use \"{name}\"": "\"{name}\" gebruiken",
|
|
2127
|
+
"It was not handed over.": "Het is niet overgedragen."
|
|
2032
2128
|
},
|
|
2033
2129
|
"plurals": {
|
|
2034
2130
|
"{count} member": [
|
|
@@ -2150,6 +2246,14 @@
|
|
|
2150
2246
|
"{count} open": [
|
|
2151
2247
|
"{count} open",
|
|
2152
2248
|
"{count} open"
|
|
2249
|
+
],
|
|
2250
|
+
"%n existing record looks like this one.": [
|
|
2251
|
+
"%n bestaand item lijkt hierop.",
|
|
2252
|
+
"%n bestaande items lijken hierop."
|
|
2253
|
+
],
|
|
2254
|
+
"%n passage found. Review each one.": [
|
|
2255
|
+
"%n passage gevonden. Beoordeel elke passage.",
|
|
2256
|
+
"%n passages gevonden. Beoordeel elke passage."
|
|
2153
2257
|
]
|
|
2154
2258
|
}
|
|
2155
2259
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@conduction/nextcloud-vue",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.110.0",
|
|
4
4
|
"description": "Shared Vue component library for Conduction Nextcloud apps — complements @nextcloud/vue with higher-level components, OpenRegister integration, and NL Design System support",
|
|
5
5
|
"homepage": "https://github.com/ConductionNL/nextcloud-vue#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<template>
|
|
6
6
|
<CnDialog
|
|
7
7
|
:name="text(config.title) || t('nextcloud-vue', 'Confirm')"
|
|
8
|
-
:eyebrow="
|
|
8
|
+
:eyebrow="eyebrowText"
|
|
9
9
|
:subtitle="text(config.subtitle)"
|
|
10
10
|
width="form"
|
|
11
11
|
:noClose="busy"
|
|
@@ -63,6 +63,24 @@
|
|
|
63
63
|
</ul>
|
|
64
64
|
</section>
|
|
65
65
|
|
|
66
|
+
<!-- Fields the action asks for, sent beside the reason. -->
|
|
67
|
+
<div v-for="field in fields"
|
|
68
|
+
:key="field.field"
|
|
69
|
+
class="cn-action-dialog__field"
|
|
70
|
+
:data-testid="`cn-action-dialog-field-${field.field}`">
|
|
71
|
+
<NcSelect v-if="field.type === 'select'"
|
|
72
|
+
:modelValue="selectedOption(field)"
|
|
73
|
+
:options="optionsOf(field)"
|
|
74
|
+
:inputLabel="text(field.label) || field.field"
|
|
75
|
+
:clearable="field.required === false"
|
|
76
|
+
@update:modelValue="(option) => pick(field, option)" />
|
|
77
|
+
<NcTextField v-else
|
|
78
|
+
:modelValue="values[field.field] || ''"
|
|
79
|
+
:type="field.type === 'datetime' ? 'datetime-local' : (field.type === 'date' ? 'date' : 'text')"
|
|
80
|
+
:label="text(field.label) || field.field"
|
|
81
|
+
@update:modelValue="(value) => setValue(field.field, value)" />
|
|
82
|
+
</div>
|
|
83
|
+
|
|
66
84
|
<div v-if="config.reason" class="cn-action-dialog__field">
|
|
67
85
|
<NcTextArea
|
|
68
86
|
:id="reasonId"
|
|
@@ -116,7 +134,7 @@ import axios from '@nextcloud/axios'
|
|
|
116
134
|
import { emit } from '@nextcloud/event-bus'
|
|
117
135
|
import { translate as t } from '@nextcloud/l10n'
|
|
118
136
|
import { generateUrl } from '@nextcloud/router'
|
|
119
|
-
import { NcButton, NcNoteCard, NcTextArea } from '@nextcloud/vue'
|
|
137
|
+
import { NcButton, NcNoteCard, NcSelect, NcTextArea, NcTextField } from '@nextcloud/vue'
|
|
120
138
|
import CheckCircle from 'vue-material-design-icons/CheckCircle.vue'
|
|
121
139
|
import CircleOutline from 'vue-material-design-icons/CircleOutline.vue'
|
|
122
140
|
import HelpCircleOutline from 'vue-material-design-icons/HelpCircleOutline.vue'
|
|
@@ -141,7 +159,8 @@ let reasonSeq = 0
|
|
|
141
159
|
* note and Archive it.
|
|
142
160
|
*
|
|
143
161
|
* `config`:
|
|
144
|
-
* - `title`, `
|
|
162
|
+
* - `title`, `subtitle`, `doneText`: texts, through the host translate;
|
|
163
|
+
* `eyebrow` a template filled from the record ("Close off · {identifier}").
|
|
145
164
|
* - `summary`: `{ source?, title, meta?, badge?, icon? }`: templates filled from
|
|
146
165
|
* the record (`source` an endpointSource to read it from, else `object`).
|
|
147
166
|
* - `facts`: `[{ title?, items: [{ label, value }] }]`, `value` a template.
|
|
@@ -149,8 +168,14 @@ let reasonSeq = 0
|
|
|
149
168
|
* `{ id, met, label?, detail? }` read from `source`; `labels[id]` gives an
|
|
150
169
|
* item's `{ label, detail?, unmetDetail? }`; the ids in `required` must be
|
|
151
170
|
* met before the action can run. `met: null` reads as unknown.
|
|
152
|
-
* - `permission`: `{ source, allowedPath, reasonPath? }`:
|
|
153
|
-
* while `allowedPath` reads true; `reasonPath` says
|
|
171
|
+
* - `permission`: `{ source, listPath?, match?, allowedPath, reasonPath? }`:
|
|
172
|
+
* the action runs only while `allowedPath` reads true; `reasonPath` says
|
|
173
|
+
* why not. With `listPath` the paths read the entry of that list whose
|
|
174
|
+
* fields equal `match` (`{ act: "archive" }`).
|
|
175
|
+
* - `fields`: `[{ field, type?: "text"|"date"|"datetime"|"select", label?,
|
|
176
|
+
* required?, options?: [{ value, label, fills? }] }]`: inputs sent beside
|
|
177
|
+
* the reason, required by default; a select option's `fills` sets other
|
|
178
|
+
* fields that are still empty.
|
|
154
179
|
* - `reason`: `{ label?, hint?, required?, field? }`: a text area; required by
|
|
155
180
|
* default; sent as `field` (default `reason`).
|
|
156
181
|
* - `note`: `{ variant?, title?, text }`: a read-only note.
|
|
@@ -163,7 +188,7 @@ let reasonSeq = 0
|
|
|
163
188
|
export default {
|
|
164
189
|
name: 'CnActionDialog',
|
|
165
190
|
|
|
166
|
-
components: { CheckCircle, CircleOutline, CnDialog, CnIcon, HelpCircleOutline, NcButton, NcNoteCard, NcTextArea },
|
|
191
|
+
components: { CheckCircle, CircleOutline, CnDialog, CnIcon, HelpCircleOutline, NcButton, NcNoteCard, NcSelect, NcTextArea, NcTextField },
|
|
167
192
|
|
|
168
193
|
inject: {
|
|
169
194
|
/** The host app's translate (CnAppRoot `cnTranslate`). */
|
|
@@ -209,6 +234,7 @@ export default {
|
|
|
209
234
|
checklistError: '',
|
|
210
235
|
allowed: true,
|
|
211
236
|
reason: '',
|
|
237
|
+
values: {},
|
|
212
238
|
busy: false,
|
|
213
239
|
refusal: '',
|
|
214
240
|
done: false,
|
|
@@ -219,7 +245,21 @@ export default {
|
|
|
219
245
|
computed: {
|
|
220
246
|
/** @return {object} The token context. */
|
|
221
247
|
tokenCtx() {
|
|
222
|
-
return { objectId: this.
|
|
248
|
+
return { objectId: this.recordId, object: this.record || {} }
|
|
249
|
+
},
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* The record's id: `objectId`, or the route's `id` when the prop is
|
|
253
|
+
* empty or a token the opener could not resolve.
|
|
254
|
+
*
|
|
255
|
+
* @return {string|number}
|
|
256
|
+
*/
|
|
257
|
+
recordId() {
|
|
258
|
+
const given = this.objectId
|
|
259
|
+
if (given !== '' && given !== null && given !== undefined && !String(given).startsWith('@')) {
|
|
260
|
+
return given
|
|
261
|
+
}
|
|
262
|
+
return (this.$route && this.$route.params && this.$route.params.id) || ''
|
|
223
263
|
},
|
|
224
264
|
|
|
225
265
|
/** @return {object} The confirm config. */
|
|
@@ -305,7 +345,27 @@ export default {
|
|
|
305
345
|
* @return {boolean}
|
|
306
346
|
*/
|
|
307
347
|
canConfirm() {
|
|
308
|
-
return !this.busy && this.allowed && this.requiredMet && (!this.reasonNeeded || this.reason.trim() !== '')
|
|
348
|
+
return !this.busy && this.allowed && this.requiredMet && this.fieldsFilled && (!this.reasonNeeded || this.reason.trim() !== '')
|
|
349
|
+
},
|
|
350
|
+
|
|
351
|
+
/** @return {string} The eyebrow, filled from the record once it is known. */
|
|
352
|
+
eyebrowText() {
|
|
353
|
+
return this.record ? this.fill(this.config.eyebrow) || this.text(this.config.eyebrow) : this.text(this.config.eyebrow)
|
|
354
|
+
},
|
|
355
|
+
|
|
356
|
+
/** @return {Array<object>} The fields with a name. */
|
|
357
|
+
fields() {
|
|
358
|
+
return (Array.isArray(this.config.fields) ? this.config.fields : []).filter((f) => f && f.field)
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Whether every required field has a value.
|
|
363
|
+
*
|
|
364
|
+
* @spec openspec/changes/action-dialog-fields-and-acts/specs/action-dialog/spec.md#requirement-an-action-dialog-asks-for-fields-and-reads-a-permission-from-a-list
|
|
365
|
+
* @return {boolean}
|
|
366
|
+
*/
|
|
367
|
+
fieldsFilled() {
|
|
368
|
+
return this.fields.every((f) => f.required === false || String(this.values[f.field] ?? '').trim() !== '')
|
|
309
369
|
},
|
|
310
370
|
},
|
|
311
371
|
|
|
@@ -380,6 +440,63 @@ export default {
|
|
|
380
440
|
}
|
|
381
441
|
},
|
|
382
442
|
|
|
443
|
+
/**
|
|
444
|
+
* The entry of a list whose fields equal `match`, or null.
|
|
445
|
+
*
|
|
446
|
+
* @param {unknown} list The list.
|
|
447
|
+
* @param {object} [match] The fields to match.
|
|
448
|
+
* @return {object|null}
|
|
449
|
+
*/
|
|
450
|
+
matchIn(list, match) {
|
|
451
|
+
const wanted = Object.entries(match || {})
|
|
452
|
+
return (Array.isArray(list) ? list : []).find((entry) => entry && wanted.every(([key, value]) => String(entry[key]) === String(value))) || null
|
|
453
|
+
},
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* A select field's options, labels translated.
|
|
457
|
+
*
|
|
458
|
+
* @param {object} field The field.
|
|
459
|
+
* @return {Array<{id: string, label: string, fills?: object}>}
|
|
460
|
+
*/
|
|
461
|
+
optionsOf(field) {
|
|
462
|
+
return (Array.isArray(field.options) ? field.options : []).map((o) => ({ id: String(o.value), label: this.text(o.label) || String(o.value), fills: o.fills }))
|
|
463
|
+
},
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* A select field's chosen option.
|
|
467
|
+
*
|
|
468
|
+
* @param {object} field The field.
|
|
469
|
+
* @return {object|null}
|
|
470
|
+
*/
|
|
471
|
+
selectedOption(field) {
|
|
472
|
+
return this.optionsOf(field).find((o) => o.id === String(this.values[field.field] ?? '')) || null
|
|
473
|
+
},
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Set a field's value.
|
|
477
|
+
*
|
|
478
|
+
* @param {string} name The field.
|
|
479
|
+
* @param {unknown} value The value.
|
|
480
|
+
*/
|
|
481
|
+
setValue(name, value) {
|
|
482
|
+
this.values = { ...this.values, [name]: value === null || value === undefined ? '' : String(value) }
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Choose a select option; its `fills` set the fields still empty.
|
|
487
|
+
*
|
|
488
|
+
* @param {object} field The select field.
|
|
489
|
+
* @param {{id: string, fills?: object}|null} option The option.
|
|
490
|
+
*/
|
|
491
|
+
pick(field, option) {
|
|
492
|
+
this.setValue(field.field, option ? option.id : '')
|
|
493
|
+
for (const [name, value] of Object.entries((option && option.fills) || {})) {
|
|
494
|
+
if (String(this.values[name] ?? '').trim() === '') {
|
|
495
|
+
this.setValue(name, this.text(value) || value)
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
},
|
|
499
|
+
|
|
383
500
|
/** @return {Promise<void>} */
|
|
384
501
|
async loadPermission() {
|
|
385
502
|
const def = this.config.permission
|
|
@@ -388,8 +505,9 @@ export default {
|
|
|
388
505
|
}
|
|
389
506
|
try {
|
|
390
507
|
const data = await this.read(def.source)
|
|
391
|
-
|
|
392
|
-
this.
|
|
508
|
+
const entry = def.listPath ? this.matchIn(readPath(data, def.listPath), def.match) : data
|
|
509
|
+
this.allowed = readPath(entry, def.allowedPath || 'allowed') === true
|
|
510
|
+
this.refusal = this.allowed || !def.reasonPath ? '' : String(readPath(entry, def.reasonPath) || '')
|
|
393
511
|
} catch {
|
|
394
512
|
this.allowed = false
|
|
395
513
|
}
|
|
@@ -420,15 +538,18 @@ export default {
|
|
|
420
538
|
if (this.config.reason) {
|
|
421
539
|
body[this.config.reason.field || 'reason'] = reason
|
|
422
540
|
}
|
|
541
|
+
for (const field of this.fields) {
|
|
542
|
+
body[field.field] = this.values[field.field] ?? ''
|
|
543
|
+
}
|
|
423
544
|
const method = String(request.method || 'POST').toLowerCase()
|
|
424
545
|
await axios[['post', 'put', 'patch', 'delete'].includes(method) ? method : 'post'](/^https?:\/\//i.test(url) ? url : generateUrl(url), body)
|
|
425
546
|
} else if (this.confirmConfig.action && typeof this.cnDispatchAction === 'function') {
|
|
426
|
-
await this.cnDispatchAction({ ...this.confirmConfig.action, args: [...(this.confirmConfig.action.args || []), { reason }] })
|
|
547
|
+
await this.cnDispatchAction({ ...this.confirmConfig.action, args: [...(this.confirmConfig.action.args || []), { ...this.values, reason }] })
|
|
427
548
|
}
|
|
428
549
|
this.done = true
|
|
429
550
|
emit(PAGE_REFRESH, {})
|
|
430
|
-
/** @event done The action ran. Payload: `
|
|
431
|
-
this.$emit('done', { reason })
|
|
551
|
+
/** @event done The action ran. Payload: the field values and `reason`. */
|
|
552
|
+
this.$emit('done', { ...this.values, reason })
|
|
432
553
|
} catch (failure) {
|
|
433
554
|
const data = failure && failure.response && failure.response.data
|
|
434
555
|
this.refusal = String((data && (data.message || data.error)) || t('nextcloud-vue', 'The action could not be completed.'))
|