@overmap-ai/core 1.0.51-add-submitted-at-to-form-revisions.0 → 1.0.51-add-teams.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/forms/builder/constants.d.ts +1 -0
- package/dist/forms/builder/utils.d.ts +1 -1
- package/dist/forms/fields/QrField/QrField.d.ts +21 -0
- package/dist/forms/fields/QrField/QrInput.d.ts +10 -0
- package/dist/forms/fields/QrField/index.d.ts +2 -0
- package/dist/forms/fields/constants.d.ts +8 -0
- package/dist/forms/fields/index.d.ts +1 -0
- package/dist/forms/renderer/FormSubmissionBrowser/FormSubmissionBrowser.d.ts +5 -5
- package/dist/forms/renderer/FormSubmissionViewer/FormSubmissionViewer.d.ts +3 -3
- package/dist/forms/typings.d.ts +5 -2
- package/dist/overmap-core.js +1122 -459
- package/dist/overmap-core.js.map +1 -1
- package/dist/overmap-core.umd.cjs +1123 -461
- package/dist/overmap-core.umd.cjs.map +1 -1
- package/dist/sdk/sdk.d.ts +2 -1
- package/dist/sdk/services/TeamService.d.ts +12 -0
- package/dist/sdk/services/UserFormSubmissionService.d.ts +9 -2
- package/dist/sdk/services/index.d.ts +1 -0
- package/dist/store/slices/categorySlice.d.ts +4 -1
- package/dist/store/slices/documentSlice.d.ts +4 -1
- package/dist/store/slices/formRevisionSlice.d.ts +66 -0
- package/dist/store/slices/formSlice.d.ts +110 -0
- package/dist/store/slices/formSubmissionSlice.d.ts +47 -0
- package/dist/store/slices/index.d.ts +4 -1
- package/dist/store/slices/issueSlice.d.ts +4 -1
- package/dist/store/slices/projectFileSlice.d.ts +4 -1
- package/dist/store/slices/teamSlice.d.ts +19 -0
- package/dist/store/slices/utils.d.ts +1 -0
- package/dist/store/slices/workspaceSlice.d.ts +4 -1
- package/dist/store/store.d.ts +13 -4
- package/dist/style.css +5 -0
- package/dist/typings/files.d.ts +11 -1
- package/dist/typings/models/attachments.d.ts +8 -11
- package/dist/typings/models/base.d.ts +10 -0
- package/dist/typings/models/forms.d.ts +6 -11
- package/dist/typings/models/index.d.ts +1 -0
- package/dist/typings/models/teams.d.ts +10 -0
- package/dist/utils/file.d.ts +2 -0
- package/dist/utils/forms.d.ts +2 -0
- package/package.json +2 -1
- package/dist/store/slices/userFormSlice.d.ts +0 -145
|
@@ -5,8 +5,8 @@ var __publicField = (obj, key, value) => {
|
|
|
5
5
|
return value;
|
|
6
6
|
};
|
|
7
7
|
(function(global2, factory) {
|
|
8
|
-
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react"), require("react/jsx-runtime"), require("@overmap-ai/blocks"), require("dependency-graph"), require("@redux-offline/redux-offline"), require("@redux-offline/redux-offline/lib/defaults"), require("localforage"), require("redux-persist-migrate"), require("@reduxjs/toolkit"), require("superagent"), require("react-redux"), require("file-saver"), require("uuid"), require("color"), require("jwt-decode"), require("@redux-offline/redux-offline/lib/constants"), require("idb"), require("formik"), require("lodash.get"), require("linkify-react"), require("@hello-pangea/dnd"), require("xlsx"), require("react-pdf"), require("react-pdf/dist/Page/AnnotationLayer.css"), require("react-pdf/dist/Page/TextLayer.css"), require("react-dom"), require("react-sketch-canvas"), require("lodash.set"), require("lodash.clonedeep")) : typeof define === "function" && define.amd ? define(["exports", "react", "react/jsx-runtime", "@overmap-ai/blocks", "dependency-graph", "@redux-offline/redux-offline", "@redux-offline/redux-offline/lib/defaults", "localforage", "redux-persist-migrate", "@reduxjs/toolkit", "superagent", "react-redux", "file-saver", "uuid", "color", "jwt-decode", "@redux-offline/redux-offline/lib/constants", "idb", "formik", "lodash.get", "linkify-react", "@hello-pangea/dnd", "xlsx", "react-pdf", "react-pdf/dist/Page/AnnotationLayer.css", "react-pdf/dist/Page/TextLayer.css", "react-dom", "react-sketch-canvas", "lodash.set", "lodash.clonedeep"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2["overmap-core"] = {}, global2.React, global2.jsxRuntime, global2.blocks, global2.dependencyGraph, global2.reduxOffline, global2.offlineConfig, global2.localforage, global2.createMigration, global2.toolkit, global2.request, global2.reactRedux, global2.saveAs, global2.uuid, global2.ColorCls, global2.jwtDecode, global2.constants, global2.idb, global2.formik, global2.get, global2.Linkify, global2.dnd, global2.xlsx, global2.reactPdf, null, null, global2.ReactDOM, global2.reactSketchCanvas, global2.set, global2.cloneDeep));
|
|
9
|
-
})(this, function(exports2, React, jsxRuntime, blocks, dependencyGraph, reduxOffline, offlineConfig, localforage, createMigration, toolkit, request, reactRedux, saveAs, uuid, ColorCls, jwtDecode, constants, idb, formik, get, Linkify, dnd, xlsx, reactPdf, AnnotationLayer_css, TextLayer_css, ReactDOM, reactSketchCanvas, set, cloneDeep) {
|
|
8
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react"), require("react/jsx-runtime"), require("@overmap-ai/blocks"), require("dependency-graph"), require("@redux-offline/redux-offline"), require("@redux-offline/redux-offline/lib/defaults"), require("localforage"), require("redux-persist-migrate"), require("@reduxjs/toolkit"), require("superagent"), require("react-redux"), require("file-saver"), require("uuid"), require("color"), require("jwt-decode"), require("@redux-offline/redux-offline/lib/constants"), require("idb"), require("formik"), require("lodash.get"), require("linkify-react"), require("@hello-pangea/dnd"), require("qr-scanner"), require("xlsx"), require("react-pdf"), require("react-pdf/dist/Page/AnnotationLayer.css"), require("react-pdf/dist/Page/TextLayer.css"), require("react-dom"), require("react-sketch-canvas"), require("lodash.set"), require("lodash.clonedeep")) : typeof define === "function" && define.amd ? define(["exports", "react", "react/jsx-runtime", "@overmap-ai/blocks", "dependency-graph", "@redux-offline/redux-offline", "@redux-offline/redux-offline/lib/defaults", "localforage", "redux-persist-migrate", "@reduxjs/toolkit", "superagent", "react-redux", "file-saver", "uuid", "color", "jwt-decode", "@redux-offline/redux-offline/lib/constants", "idb", "formik", "lodash.get", "linkify-react", "@hello-pangea/dnd", "qr-scanner", "xlsx", "react-pdf", "react-pdf/dist/Page/AnnotationLayer.css", "react-pdf/dist/Page/TextLayer.css", "react-dom", "react-sketch-canvas", "lodash.set", "lodash.clonedeep"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2["overmap-core"] = {}, global2.React, global2.jsxRuntime, global2.blocks, global2.dependencyGraph, global2.reduxOffline, global2.offlineConfig, global2.localforage, global2.createMigration, global2.toolkit, global2.request, global2.reactRedux, global2.saveAs, global2.uuid, global2.ColorCls, global2.jwtDecode, global2.constants, global2.idb, global2.formik, global2.get, global2.Linkify, global2.dnd, global2.QrScannerAPI, global2.xlsx, global2.reactPdf, null, null, global2.ReactDOM, global2.reactSketchCanvas, global2.set, global2.cloneDeep));
|
|
9
|
+
})(this, function(exports2, React, jsxRuntime, blocks, dependencyGraph, reduxOffline, offlineConfig, localforage, createMigration, toolkit, request, reactRedux, saveAs, uuid, ColorCls, jwtDecode, constants, idb, formik, get, Linkify, dnd, QrScannerAPI, xlsx, reactPdf, AnnotationLayer_css, TextLayer_css, ReactDOM, reactSketchCanvas, set, cloneDeep) {
|
|
10
10
|
var _a;
|
|
11
11
|
"use strict";
|
|
12
12
|
function _interopNamespaceDefault(e) {
|
|
@@ -668,15 +668,15 @@ var __publicField = (obj, key, value) => {
|
|
|
668
668
|
};
|
|
669
669
|
const migrations = [initialVersioning, signOut, signOut, createOutboxState];
|
|
670
670
|
const manifest = Object.fromEntries(migrations.map((migration2, i) => [i, wrapMigration(migration2)]));
|
|
671
|
-
const initialState$
|
|
671
|
+
const initialState$q = {
|
|
672
672
|
accessToken: "",
|
|
673
673
|
refreshToken: "",
|
|
674
674
|
isLoggedIn: false
|
|
675
675
|
};
|
|
676
676
|
const authSlice = toolkit.createSlice({
|
|
677
677
|
name: "auth",
|
|
678
|
-
initialState: initialState$
|
|
679
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
678
|
+
initialState: initialState$q,
|
|
679
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$q)),
|
|
680
680
|
reducers: {
|
|
681
681
|
setTokens: (state, action) => {
|
|
682
682
|
state.accessToken = action.payload.accessToken;
|
|
@@ -841,6 +841,19 @@ var __publicField = (obj, key, value) => {
|
|
|
841
841
|
element.click();
|
|
842
842
|
document.body.removeChild(element);
|
|
843
843
|
}
|
|
844
|
+
const constructUploadedFilePayloads = async (files) => {
|
|
845
|
+
const filePayloads = {};
|
|
846
|
+
for (const file of files) {
|
|
847
|
+
const sha1 = await hashFile(file);
|
|
848
|
+
filePayloads[sha1] = {
|
|
849
|
+
sha1,
|
|
850
|
+
extension: file.name.split(".").pop() || "",
|
|
851
|
+
file_type: file.type,
|
|
852
|
+
size: file.size
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
return Object.values(filePayloads);
|
|
856
|
+
};
|
|
844
857
|
const fileToBlob = async (dataUrl) => {
|
|
845
858
|
return (await fetch(dataUrl)).blob();
|
|
846
859
|
};
|
|
@@ -1407,7 +1420,7 @@ var __publicField = (obj, key, value) => {
|
|
|
1407
1420
|
return getLocalDateString(date);
|
|
1408
1421
|
return relative.format(days, "days");
|
|
1409
1422
|
});
|
|
1410
|
-
const initialState$
|
|
1423
|
+
const initialState$p = {
|
|
1411
1424
|
categories: {},
|
|
1412
1425
|
usedCategoryColors: [],
|
|
1413
1426
|
categoryVisibility: {
|
|
@@ -1417,8 +1430,8 @@ var __publicField = (obj, key, value) => {
|
|
|
1417
1430
|
};
|
|
1418
1431
|
const categorySlice = toolkit.createSlice({
|
|
1419
1432
|
name: "categories",
|
|
1420
|
-
initialState: initialState$
|
|
1421
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
1433
|
+
initialState: initialState$p,
|
|
1434
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$p)),
|
|
1422
1435
|
reducers: {
|
|
1423
1436
|
setCategories: (state, action) => {
|
|
1424
1437
|
if (!Array.isArray(action.payload))
|
|
@@ -1587,14 +1600,14 @@ var __publicField = (obj, key, value) => {
|
|
|
1587
1600
|
delete state.attachments[attachmentId];
|
|
1588
1601
|
}
|
|
1589
1602
|
}
|
|
1590
|
-
const initialState$
|
|
1603
|
+
const initialState$o = {
|
|
1591
1604
|
components: {},
|
|
1592
1605
|
attachments: {}
|
|
1593
1606
|
};
|
|
1594
1607
|
const componentSlice = toolkit.createSlice({
|
|
1595
1608
|
name: "components",
|
|
1596
|
-
initialState: initialState$
|
|
1597
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
1609
|
+
initialState: initialState$o,
|
|
1610
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$o)),
|
|
1598
1611
|
reducers: {
|
|
1599
1612
|
addComponent: (state, action) => {
|
|
1600
1613
|
state.components[action.payload.offline_id] = action.payload;
|
|
@@ -1750,13 +1763,13 @@ var __publicField = (obj, key, value) => {
|
|
|
1750
1763
|
removeAllComponentsOfType
|
|
1751
1764
|
} = componentSlice.actions;
|
|
1752
1765
|
const componentReducer = componentSlice.reducer;
|
|
1753
|
-
const initialState$
|
|
1766
|
+
const initialState$n = {
|
|
1754
1767
|
completionsByComponentId: {}
|
|
1755
1768
|
};
|
|
1756
1769
|
const componentStageCompletionSlice = toolkit.createSlice({
|
|
1757
1770
|
name: "componentStageCompletions",
|
|
1758
|
-
initialState: initialState$
|
|
1759
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
1771
|
+
initialState: initialState$n,
|
|
1772
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$n)),
|
|
1760
1773
|
reducers: {
|
|
1761
1774
|
addStageCompletion: (state, action) => {
|
|
1762
1775
|
let stageToCompletionDateMapping = state.completionsByComponentId[action.payload.component];
|
|
@@ -1807,13 +1820,13 @@ var __publicField = (obj, key, value) => {
|
|
|
1807
1820
|
return Object.keys(state.componentStageCompletionReducer.completionsByComponentId[component.offline_id] ?? {});
|
|
1808
1821
|
};
|
|
1809
1822
|
const componentStageCompletionReducer = componentStageCompletionSlice.reducer;
|
|
1810
|
-
const initialState$
|
|
1823
|
+
const initialState$m = {
|
|
1811
1824
|
stages: {}
|
|
1812
1825
|
};
|
|
1813
1826
|
const componentStageSlice = toolkit.createSlice({
|
|
1814
1827
|
name: "componentStages",
|
|
1815
|
-
initialState: initialState$
|
|
1816
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
1828
|
+
initialState: initialState$m,
|
|
1829
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$m)),
|
|
1817
1830
|
reducers: {
|
|
1818
1831
|
addStages: (state, action) => {
|
|
1819
1832
|
Object.assign(state.stages, toOfflineIdRecord(action.payload));
|
|
@@ -1923,15 +1936,15 @@ var __publicField = (obj, key, value) => {
|
|
|
1923
1936
|
);
|
|
1924
1937
|
const { addStages, updateStages, removeStages, linkStageToForm, unlinkStageToForm } = componentStageSlice.actions;
|
|
1925
1938
|
const componentStageReducer = componentStageSlice.reducer;
|
|
1926
|
-
const initialState$
|
|
1939
|
+
const initialState$l = {
|
|
1927
1940
|
componentTypes: {},
|
|
1928
1941
|
hiddenComponentTypeIds: {},
|
|
1929
1942
|
attachments: {}
|
|
1930
1943
|
};
|
|
1931
1944
|
const componentTypeSlice = toolkit.createSlice({
|
|
1932
1945
|
name: "componentTypes",
|
|
1933
|
-
initialState: initialState$
|
|
1934
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
1946
|
+
initialState: initialState$l,
|
|
1947
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$l)),
|
|
1935
1948
|
reducers: {
|
|
1936
1949
|
addComponentType: (state, action) => {
|
|
1937
1950
|
state.componentTypes[action.payload.offline_id] = action.payload;
|
|
@@ -2042,13 +2055,13 @@ var __publicField = (obj, key, value) => {
|
|
|
2042
2055
|
deleteComponentType
|
|
2043
2056
|
} = componentTypeSlice.actions;
|
|
2044
2057
|
const componentTypeReducer = componentTypeSlice.reducer;
|
|
2045
|
-
const initialState$
|
|
2058
|
+
const initialState$k = {
|
|
2046
2059
|
workspaces: {},
|
|
2047
2060
|
activeWorkspaceId: null
|
|
2048
2061
|
};
|
|
2049
2062
|
const workspaceSlice = toolkit.createSlice({
|
|
2050
2063
|
name: "workspace",
|
|
2051
|
-
initialState: initialState$
|
|
2064
|
+
initialState: initialState$k,
|
|
2052
2065
|
// The `reducers` field lets us define reducers and generate associated actions
|
|
2053
2066
|
reducers: {
|
|
2054
2067
|
setWorkspaces: (state, action) => {
|
|
@@ -2105,7 +2118,7 @@ var __publicField = (obj, key, value) => {
|
|
|
2105
2118
|
);
|
|
2106
2119
|
const workspaceReducer = workspaceSlice.reducer;
|
|
2107
2120
|
const maxRecentIssues = 10;
|
|
2108
|
-
const initialState$
|
|
2121
|
+
const initialState$j = {
|
|
2109
2122
|
issues: {},
|
|
2110
2123
|
attachments: {},
|
|
2111
2124
|
comments: {},
|
|
@@ -2117,9 +2130,9 @@ var __publicField = (obj, key, value) => {
|
|
|
2117
2130
|
};
|
|
2118
2131
|
const issueSlice = toolkit.createSlice({
|
|
2119
2132
|
name: "issues",
|
|
2120
|
-
initialState: initialState$
|
|
2133
|
+
initialState: initialState$j,
|
|
2121
2134
|
extraReducers: (builder) => builder.addCase("RESET", (state) => {
|
|
2122
|
-
Object.assign(state, initialState$
|
|
2135
|
+
Object.assign(state, initialState$j);
|
|
2123
2136
|
}),
|
|
2124
2137
|
reducers: {
|
|
2125
2138
|
setIssues: (state, action) => {
|
|
@@ -2527,15 +2540,15 @@ var __publicField = (obj, key, value) => {
|
|
|
2527
2540
|
}
|
|
2528
2541
|
);
|
|
2529
2542
|
const issueReducer = issueSlice.reducer;
|
|
2530
|
-
const initialState$
|
|
2543
|
+
const initialState$i = {
|
|
2531
2544
|
s3Urls: {}
|
|
2532
2545
|
};
|
|
2533
2546
|
const msPerHour = 1e3 * 60 * 60;
|
|
2534
2547
|
const msPerWeek = msPerHour * 24 * 7;
|
|
2535
2548
|
const fileSlice = toolkit.createSlice({
|
|
2536
2549
|
name: "file",
|
|
2537
|
-
initialState: initialState$
|
|
2538
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
2550
|
+
initialState: initialState$i,
|
|
2551
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$i)),
|
|
2539
2552
|
reducers: {
|
|
2540
2553
|
setUploadUrl: (state, action) => {
|
|
2541
2554
|
const { url, fields, sha1 } = action.payload;
|
|
@@ -2562,7 +2575,7 @@ var __publicField = (obj, key, value) => {
|
|
|
2562
2575
|
return url;
|
|
2563
2576
|
};
|
|
2564
2577
|
const fileReducer = fileSlice.reducer;
|
|
2565
|
-
const initialState$
|
|
2578
|
+
const initialState$h = {
|
|
2566
2579
|
// TODO: Change first MapStyle.SATELLITE to MaptStyle.None when project creation map is fixed
|
|
2567
2580
|
mapStyle: MapStyle.SATELLITE,
|
|
2568
2581
|
showTooltips: false,
|
|
@@ -2570,8 +2583,8 @@ var __publicField = (obj, key, value) => {
|
|
|
2570
2583
|
};
|
|
2571
2584
|
const mapSlice = toolkit.createSlice({
|
|
2572
2585
|
name: "map",
|
|
2573
|
-
initialState: initialState$
|
|
2574
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
2586
|
+
initialState: initialState$h,
|
|
2587
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$h)),
|
|
2575
2588
|
reducers: {
|
|
2576
2589
|
setMapStyle: (state, action) => {
|
|
2577
2590
|
state.mapStyle = action.payload;
|
|
@@ -2640,7 +2653,7 @@ var __publicField = (obj, key, value) => {
|
|
|
2640
2653
|
LicenseStatus2[LicenseStatus2["PAST_DUE"] = 8] = "PAST_DUE";
|
|
2641
2654
|
return LicenseStatus2;
|
|
2642
2655
|
})(LicenseStatus || {});
|
|
2643
|
-
const initialState$
|
|
2656
|
+
const initialState$g = {
|
|
2644
2657
|
users: {},
|
|
2645
2658
|
currentUser: {
|
|
2646
2659
|
id: 0,
|
|
@@ -2651,8 +2664,8 @@ var __publicField = (obj, key, value) => {
|
|
|
2651
2664
|
};
|
|
2652
2665
|
const userSlice = toolkit.createSlice({
|
|
2653
2666
|
name: "users",
|
|
2654
|
-
initialState: initialState$
|
|
2655
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
2667
|
+
initialState: initialState$g,
|
|
2668
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$g)),
|
|
2656
2669
|
reducers: {
|
|
2657
2670
|
setUsers: (state, action) => {
|
|
2658
2671
|
const usersMapping = {};
|
|
@@ -2714,13 +2727,13 @@ var __publicField = (obj, key, value) => {
|
|
|
2714
2727
|
const selectUsersAsMapping = (state) => state.userReducer.users;
|
|
2715
2728
|
const selectFavouriteProjects = (state) => state.userReducer.currentUser.profile.favourite_project_ids;
|
|
2716
2729
|
const userReducer = userSlice.reducer;
|
|
2717
|
-
const initialState$
|
|
2730
|
+
const initialState$f = {
|
|
2718
2731
|
organizationAccesses: {}
|
|
2719
2732
|
};
|
|
2720
2733
|
const organizationAccessSlice = toolkit.createSlice({
|
|
2721
2734
|
name: "organizationAccess",
|
|
2722
|
-
initialState: initialState$
|
|
2723
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
2735
|
+
initialState: initialState$f,
|
|
2736
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$f)),
|
|
2724
2737
|
reducers: {
|
|
2725
2738
|
setOrganizationAccesses: (state, action) => {
|
|
2726
2739
|
if (!Array.isArray(action.payload))
|
|
@@ -2783,13 +2796,13 @@ var __publicField = (obj, key, value) => {
|
|
|
2783
2796
|
return organizationAccesses;
|
|
2784
2797
|
};
|
|
2785
2798
|
const organizationAccessReducer = organizationAccessSlice.reducer;
|
|
2786
|
-
const initialState$
|
|
2799
|
+
const initialState$e = {
|
|
2787
2800
|
licenses: {}
|
|
2788
2801
|
};
|
|
2789
2802
|
const licenseSlice = toolkit.createSlice({
|
|
2790
2803
|
name: "license",
|
|
2791
|
-
initialState: initialState$
|
|
2792
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
2804
|
+
initialState: initialState$e,
|
|
2805
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$e)),
|
|
2793
2806
|
reducers: {
|
|
2794
2807
|
setLicenses: (state, action) => {
|
|
2795
2808
|
if (!Array.isArray(action.payload))
|
|
@@ -2834,13 +2847,13 @@ var __publicField = (obj, key, value) => {
|
|
|
2834
2847
|
(licenses) => Object.values(licenses).filter((license) => license.project).reduce((accum, license) => ({ ...accum, [license.project]: license }), {})
|
|
2835
2848
|
);
|
|
2836
2849
|
const licenseReducer = licenseSlice.reducer;
|
|
2837
|
-
const initialState$
|
|
2850
|
+
const initialState$d = {
|
|
2838
2851
|
projectAccesses: {}
|
|
2839
2852
|
};
|
|
2840
2853
|
const projectAccessSlice = toolkit.createSlice({
|
|
2841
2854
|
name: "projectAccess",
|
|
2842
|
-
initialState: initialState$
|
|
2843
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
2855
|
+
initialState: initialState$d,
|
|
2856
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$d)),
|
|
2844
2857
|
reducers: {
|
|
2845
2858
|
setProjectAccesses: (state, action) => {
|
|
2846
2859
|
if (!Array.isArray(action.payload))
|
|
@@ -2908,7 +2921,7 @@ var __publicField = (obj, key, value) => {
|
|
|
2908
2921
|
return projectAccesses;
|
|
2909
2922
|
};
|
|
2910
2923
|
const projectAccessReducer = projectAccessSlice.reducer;
|
|
2911
|
-
const initialState$
|
|
2924
|
+
const initialState$c = {
|
|
2912
2925
|
projects: {},
|
|
2913
2926
|
activeProjectId: null,
|
|
2914
2927
|
recentProjectIds: [],
|
|
@@ -2918,7 +2931,7 @@ var __publicField = (obj, key, value) => {
|
|
|
2918
2931
|
};
|
|
2919
2932
|
const projectSlice = toolkit.createSlice({
|
|
2920
2933
|
name: "projects",
|
|
2921
|
-
initialState: initialState$
|
|
2934
|
+
initialState: initialState$c,
|
|
2922
2935
|
reducers: {
|
|
2923
2936
|
setProjects: (state, action) => {
|
|
2924
2937
|
const projectsMap = {};
|
|
@@ -3105,14 +3118,14 @@ var __publicField = (obj, key, value) => {
|
|
|
3105
3118
|
}
|
|
3106
3119
|
)
|
|
3107
3120
|
);
|
|
3108
|
-
const initialState$
|
|
3121
|
+
const initialState$b = {
|
|
3109
3122
|
organizations: {},
|
|
3110
3123
|
activeOrganizationId: null
|
|
3111
3124
|
};
|
|
3112
3125
|
const organizationSlice = toolkit.createSlice({
|
|
3113
3126
|
name: "organizations",
|
|
3114
|
-
initialState: initialState$
|
|
3115
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
3127
|
+
initialState: initialState$b,
|
|
3128
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$b)),
|
|
3116
3129
|
reducers: {
|
|
3117
3130
|
setOrganizations: (state, action) => {
|
|
3118
3131
|
for (const org of action.payload) {
|
|
@@ -3231,14 +3244,14 @@ var __publicField = (obj, key, value) => {
|
|
|
3231
3244
|
}
|
|
3232
3245
|
};
|
|
3233
3246
|
};
|
|
3234
|
-
const initialState$
|
|
3247
|
+
const initialState$a = {
|
|
3235
3248
|
deletedRequests: [],
|
|
3236
3249
|
latestRetryTime: 0
|
|
3237
3250
|
};
|
|
3238
3251
|
const outboxSlice = toolkit.createSlice({
|
|
3239
3252
|
name: "outbox",
|
|
3240
|
-
initialState: initialState$
|
|
3241
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
3253
|
+
initialState: initialState$a,
|
|
3254
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$a)),
|
|
3242
3255
|
reducers: {
|
|
3243
3256
|
// enqueueActions is a reducer that does nothing but enqueue API request to the Redux Offline outbox
|
|
3244
3257
|
// Whenever an issue is being created, a reducer addIssue() is responsible for adding it to the offline store
|
|
@@ -3270,7 +3283,7 @@ var __publicField = (obj, key, value) => {
|
|
|
3270
3283
|
const selectLatestRetryTime = (state) => state.outboxReducer.latestRetryTime;
|
|
3271
3284
|
const { enqueueRequest, markForDeletion, markAsDeleted, _setLatestRetryTime } = outboxSlice.actions;
|
|
3272
3285
|
const outboxReducer = outboxSlice.reducer;
|
|
3273
|
-
const initialState$
|
|
3286
|
+
const initialState$9 = {
|
|
3274
3287
|
projectFiles: {},
|
|
3275
3288
|
activeProjectFileId: null,
|
|
3276
3289
|
isImportingProjectFile: false,
|
|
@@ -3278,8 +3291,8 @@ var __publicField = (obj, key, value) => {
|
|
|
3278
3291
|
};
|
|
3279
3292
|
const projectFileSlice = toolkit.createSlice({
|
|
3280
3293
|
name: "projectFiles",
|
|
3281
|
-
initialState: initialState$
|
|
3282
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
3294
|
+
initialState: initialState$9,
|
|
3295
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$9)),
|
|
3283
3296
|
reducers: {
|
|
3284
3297
|
addOrReplaceProjectFiles: (state, action) => {
|
|
3285
3298
|
for (let fileObj of action.payload) {
|
|
@@ -3380,12 +3393,12 @@ var __publicField = (obj, key, value) => {
|
|
|
3380
3393
|
const selectActiveProjectFileId = (state) => state.projectFileReducer.activeProjectFileId;
|
|
3381
3394
|
const selectIsImportingProjectFile = (state) => state.projectFileReducer.isImportingProjectFile;
|
|
3382
3395
|
const projectFileReducer = projectFileSlice.reducer;
|
|
3383
|
-
const initialState$
|
|
3396
|
+
const initialState$8 = {
|
|
3384
3397
|
isRehydrated: false
|
|
3385
3398
|
};
|
|
3386
3399
|
const rehydratedSlice = toolkit.createSlice({
|
|
3387
3400
|
name: "rehydrated",
|
|
3388
|
-
initialState: initialState$
|
|
3401
|
+
initialState: initialState$8,
|
|
3389
3402
|
// The `reducers` field lets us define reducers and generate associated actions
|
|
3390
3403
|
reducers: {
|
|
3391
3404
|
setRehydrated: (state, action) => {
|
|
@@ -3395,7 +3408,7 @@ var __publicField = (obj, key, value) => {
|
|
|
3395
3408
|
});
|
|
3396
3409
|
const selectRehydrated = (state) => state.rehydratedReducer.isRehydrated;
|
|
3397
3410
|
const rehydratedReducer = rehydratedSlice.reducer;
|
|
3398
|
-
const initialState$
|
|
3411
|
+
const initialState$7 = {
|
|
3399
3412
|
useIssueTemplate: false,
|
|
3400
3413
|
placementMode: false,
|
|
3401
3414
|
enableClustering: false,
|
|
@@ -3412,8 +3425,8 @@ var __publicField = (obj, key, value) => {
|
|
|
3412
3425
|
};
|
|
3413
3426
|
const settingSlice = toolkit.createSlice({
|
|
3414
3427
|
name: "settings",
|
|
3415
|
-
initialState: initialState$
|
|
3416
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$
|
|
3428
|
+
initialState: initialState$7,
|
|
3429
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$7)),
|
|
3417
3430
|
reducers: {
|
|
3418
3431
|
setEnableDuplicateIssues: (state, action) => {
|
|
3419
3432
|
state.useIssueTemplate = action.payload;
|
|
@@ -3459,146 +3472,231 @@ var __publicField = (obj, key, value) => {
|
|
|
3459
3472
|
const settingReducer = settingSlice.reducer;
|
|
3460
3473
|
const selectIsFetchingInitialData = (state) => state.settingReducer.isFetchingInitialData;
|
|
3461
3474
|
const selectIsLoading = (state) => state.settingReducer.isLoading;
|
|
3462
|
-
const
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
if (
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
return;
|
|
3474
|
-
}
|
|
3475
|
-
if (revision.revision === "Pending") {
|
|
3476
|
-
if (preferPending) {
|
|
3477
|
-
LATEST_REVISION_CACHE[revision.form] = revision;
|
|
3478
|
-
}
|
|
3479
|
-
return;
|
|
3480
|
-
}
|
|
3481
|
-
const cachedRevision = (_a2 = LATEST_REVISION_CACHE[revision.form]) == null ? void 0 : _a2.revision;
|
|
3482
|
-
if (revision.revision > (typeof cachedRevision === "number" ? cachedRevision : -1)) {
|
|
3483
|
-
LATEST_REVISION_CACHE[revision.form] = revision;
|
|
3475
|
+
const formRevisionSortFn = (formRevisionA, formRevisionB) => {
|
|
3476
|
+
const revisionA = formRevisionA.revision;
|
|
3477
|
+
const revisionB = formRevisionB.revision;
|
|
3478
|
+
if (revisionA === "Pending" && revisionB === "Pending") {
|
|
3479
|
+
return formRevisionA.submitted_at < formRevisionB.submitted_at ? -1 : 1;
|
|
3480
|
+
} else if (revisionA === "Pending") {
|
|
3481
|
+
return 1;
|
|
3482
|
+
} else if (revisionB === "Pending") {
|
|
3483
|
+
return -1;
|
|
3484
|
+
} else {
|
|
3485
|
+
return revisionA < revisionB ? -1 : 1;
|
|
3484
3486
|
}
|
|
3485
|
-
}
|
|
3486
|
-
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
revisionAttachments: {}
|
|
3495
|
-
};
|
|
3496
|
-
const userFormSlice = toolkit.createSlice({
|
|
3497
|
-
name: "userForms",
|
|
3498
|
-
initialState: initialState$3,
|
|
3499
|
-
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$3)),
|
|
3487
|
+
};
|
|
3488
|
+
const initialState$6 = {
|
|
3489
|
+
formRevisions: {},
|
|
3490
|
+
attachments: {}
|
|
3491
|
+
};
|
|
3492
|
+
const formRevisionsSlice = toolkit.createSlice({
|
|
3493
|
+
name: "formRevisions",
|
|
3494
|
+
initialState: initialState$6,
|
|
3495
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$6)),
|
|
3500
3496
|
reducers: {
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
action.payload.
|
|
3504
|
-
state.userForms[userForm.offline_id] = userForm;
|
|
3505
|
-
});
|
|
3506
|
-
},
|
|
3507
|
-
addUserForm: (state, action) => {
|
|
3508
|
-
state.userForms[action.payload.offline_id] = action.payload;
|
|
3497
|
+
// revision related actions
|
|
3498
|
+
setFormRevision: (state, action) => {
|
|
3499
|
+
state.formRevisions[action.payload.offline_id] = action.payload;
|
|
3509
3500
|
},
|
|
3510
|
-
|
|
3511
|
-
|
|
3512
|
-
|
|
3513
|
-
|
|
3514
|
-
|
|
3515
|
-
addUserFormRevisions: (state, action) => {
|
|
3516
|
-
action.payload.forEach((userFormRevision) => {
|
|
3517
|
-
state.revisions[userFormRevision.offline_id] = userFormRevision;
|
|
3518
|
-
considerCachingRevision(userFormRevision);
|
|
3519
|
-
});
|
|
3520
|
-
},
|
|
3521
|
-
addUserFormRevision: (state, action) => {
|
|
3522
|
-
state.revisions[action.payload.offline_id] = action.payload;
|
|
3523
|
-
considerCachingRevision(action.payload);
|
|
3501
|
+
setFormRevisions: (state, action) => {
|
|
3502
|
+
state.formRevisions = {};
|
|
3503
|
+
for (const revision of action.payload) {
|
|
3504
|
+
state.formRevisions[revision.offline_id] = revision;
|
|
3505
|
+
}
|
|
3524
3506
|
},
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3507
|
+
addFormRevision: (state, action) => {
|
|
3508
|
+
if (state.formRevisions[action.payload.offline_id] !== void 0) {
|
|
3509
|
+
throw new Error(`Revision with offline_id ${action.payload.offline_id} already exists`);
|
|
3510
|
+
}
|
|
3511
|
+
state.formRevisions[action.payload.offline_id] = action.payload;
|
|
3528
3512
|
},
|
|
3529
|
-
|
|
3513
|
+
addFormRevisions: (state, action) => {
|
|
3530
3514
|
for (const userFormRevision of action.payload) {
|
|
3531
|
-
|
|
3532
|
-
|
|
3515
|
+
if (state.formRevisions[userFormRevision.offline_id] !== void 0) {
|
|
3516
|
+
throw new Error(`Revision with offline_id ${userFormRevision.offline_id} already exists`);
|
|
3517
|
+
}
|
|
3533
3518
|
}
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
state.submissions[action.payload.offline_id] = action.payload;
|
|
3537
|
-
},
|
|
3538
|
-
addUserFormSubmissionAttachment: (state, action) => {
|
|
3539
|
-
const submissionId = action.payload.submission;
|
|
3540
|
-
const submissionAttachments = state.submissionAttachments[submissionId];
|
|
3541
|
-
if (submissionAttachments) {
|
|
3542
|
-
submissionAttachments.push(action.payload);
|
|
3543
|
-
} else {
|
|
3544
|
-
state.submissionAttachments[submissionId] = [action.payload];
|
|
3519
|
+
for (const userFormRevision of action.payload) {
|
|
3520
|
+
state.formRevisions[userFormRevision.offline_id] = userFormRevision;
|
|
3545
3521
|
}
|
|
3546
3522
|
},
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
revisionAttachments.push(action.payload);
|
|
3552
|
-
} else {
|
|
3553
|
-
state.revisionAttachments[revisionId] = [action.payload];
|
|
3523
|
+
// UserFormRevisions do not get updated
|
|
3524
|
+
deleteFormRevision: (state, action) => {
|
|
3525
|
+
if (state.formRevisions[action.payload] === void 0) {
|
|
3526
|
+
throw new Error(`Revision with offline_id ${action.payload} does not exist`);
|
|
3554
3527
|
}
|
|
3528
|
+
delete state.formRevisions[action.payload];
|
|
3555
3529
|
},
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
const submissionAttachments = state.submissionAttachments[submissionId];
|
|
3561
|
-
if (submissionAttachments) {
|
|
3562
|
-
submissionAttachments.push(attachment);
|
|
3563
|
-
} else {
|
|
3564
|
-
state.submissionAttachments[submissionId] = [attachment];
|
|
3530
|
+
deleteFormRevisions: (state, action) => {
|
|
3531
|
+
for (const offlineId of action.payload) {
|
|
3532
|
+
if (state.formRevisions[offlineId] === void 0) {
|
|
3533
|
+
throw new Error(`Revision with offline_id ${offlineId} does not exist`);
|
|
3565
3534
|
}
|
|
3566
3535
|
}
|
|
3536
|
+
for (const offlineId of action.payload) {
|
|
3537
|
+
delete state.formRevisions[offlineId];
|
|
3538
|
+
}
|
|
3567
3539
|
},
|
|
3568
|
-
|
|
3569
|
-
|
|
3540
|
+
// attachment related actions
|
|
3541
|
+
setFormRevisionAttachments: (state, action) => {
|
|
3542
|
+
state.attachments = {};
|
|
3570
3543
|
for (const attachment of action.payload) {
|
|
3571
|
-
|
|
3572
|
-
const revisionAttachments = state.revisionAttachments[revisionId];
|
|
3573
|
-
if (revisionAttachments) {
|
|
3574
|
-
revisionAttachments.push(attachment);
|
|
3575
|
-
} else {
|
|
3576
|
-
state.revisionAttachments[revisionId] = [attachment];
|
|
3577
|
-
}
|
|
3544
|
+
state.attachments[attachment.offline_id] = attachment;
|
|
3578
3545
|
}
|
|
3579
3546
|
},
|
|
3580
|
-
|
|
3581
|
-
|
|
3547
|
+
addFormRevisionAttachment: (state, action) => {
|
|
3548
|
+
if (state.attachments[action.payload.offline_id] !== void 0) {
|
|
3549
|
+
throw new Error(`Attachment with offline_id ${action.payload.offline_id} already exists`);
|
|
3550
|
+
}
|
|
3551
|
+
state.attachments[action.payload.offline_id] = action.payload;
|
|
3582
3552
|
},
|
|
3583
|
-
|
|
3584
|
-
for (const
|
|
3585
|
-
|
|
3553
|
+
addFormRevisionAttachments: (state, action) => {
|
|
3554
|
+
for (const attachment of action.payload) {
|
|
3555
|
+
if (state.attachments[attachment.offline_id] !== void 0) {
|
|
3556
|
+
throw new Error(`Attachment with offline_id ${attachment.offline_id} already exists`);
|
|
3557
|
+
}
|
|
3558
|
+
}
|
|
3559
|
+
for (const attachment of action.payload) {
|
|
3560
|
+
state.attachments[attachment.offline_id] = attachment;
|
|
3586
3561
|
}
|
|
3587
3562
|
},
|
|
3588
|
-
|
|
3589
|
-
|
|
3590
|
-
|
|
3563
|
+
deleteFormRevisionAttachment: (state, action) => {
|
|
3564
|
+
if (state.attachments[action.payload] === void 0) {
|
|
3565
|
+
throw new Error(`Attachment with offline_id ${action.payload} does not exist`);
|
|
3591
3566
|
}
|
|
3567
|
+
delete state.attachments[action.payload];
|
|
3592
3568
|
},
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3569
|
+
deleteFormRevisionAttachments: (state, action) => {
|
|
3570
|
+
for (const offlineId of action.payload) {
|
|
3571
|
+
if (state.attachments[offlineId] === void 0) {
|
|
3572
|
+
throw new Error(`Attachment with offline_id ${offlineId} does not exist`);
|
|
3573
|
+
}
|
|
3574
|
+
}
|
|
3575
|
+
for (const offlineId of action.payload) {
|
|
3576
|
+
delete state.attachments[offlineId];
|
|
3577
|
+
}
|
|
3578
|
+
}
|
|
3579
|
+
}
|
|
3580
|
+
});
|
|
3581
|
+
const {
|
|
3582
|
+
setFormRevision,
|
|
3583
|
+
setFormRevisions,
|
|
3584
|
+
addFormRevision,
|
|
3585
|
+
addFormRevisions,
|
|
3586
|
+
deleteFormRevision,
|
|
3587
|
+
deleteFormRevisions,
|
|
3588
|
+
setFormRevisionAttachments,
|
|
3589
|
+
addFormRevisionAttachment,
|
|
3590
|
+
addFormRevisionAttachments,
|
|
3591
|
+
deleteFormRevisionAttachment,
|
|
3592
|
+
deleteFormRevisionAttachments
|
|
3593
|
+
} = formRevisionsSlice.actions;
|
|
3594
|
+
const selectFormRevisionMapping = (state) => state.formRevisionReducer.formRevisions;
|
|
3595
|
+
const selectFormRevisions = toolkit.createSelector(
|
|
3596
|
+
[selectFormRevisionMapping],
|
|
3597
|
+
(formRevisions) => Object.values(formRevisions)
|
|
3598
|
+
);
|
|
3599
|
+
const selectFormRevision = (formRevisionId) => (state) => {
|
|
3600
|
+
return state.formRevisionReducer.formRevisions[formRevisionId];
|
|
3601
|
+
};
|
|
3602
|
+
const _selectLatestFormRevision = (formRevisions, formId2) => {
|
|
3603
|
+
let ret = null;
|
|
3604
|
+
for (const candidate of Object.values(formRevisions)) {
|
|
3605
|
+
if (candidate.form === formId2 && (!ret || ret.revision < candidate.revision)) {
|
|
3606
|
+
ret = candidate;
|
|
3607
|
+
}
|
|
3608
|
+
}
|
|
3609
|
+
if (!ret) {
|
|
3610
|
+
throw new Error("No form revision found for form " + formId2);
|
|
3611
|
+
}
|
|
3612
|
+
return ret;
|
|
3613
|
+
};
|
|
3614
|
+
const selectLatestFormRevisionOfForm = restructureCreateSelectorWithArgs(
|
|
3615
|
+
toolkit.createSelector([selectFormRevisions, (_state, formId2) => formId2], (revisions, formId2) => {
|
|
3616
|
+
return revisions.filter((revision) => revision.form === formId2).sort(formRevisionSortFn).pop();
|
|
3617
|
+
})
|
|
3618
|
+
);
|
|
3619
|
+
const selectFormRevisionsOfForm = restructureCreateSelectorWithArgs(
|
|
3620
|
+
toolkit.createSelector([selectFormRevisions, (_state, formId2) => formId2], (revisions, formId2) => {
|
|
3621
|
+
return revisions.filter((revision) => {
|
|
3622
|
+
return revision.form === formId2;
|
|
3623
|
+
});
|
|
3624
|
+
})
|
|
3625
|
+
);
|
|
3626
|
+
const selectLatestFormRevisionsOfComponentTypes = restructureCreateSelectorWithArgs(
|
|
3627
|
+
toolkit.createSelector(
|
|
3628
|
+
[
|
|
3629
|
+
(state) => state.formReducer.forms,
|
|
3630
|
+
selectFormRevisionMapping,
|
|
3631
|
+
(_state, componentTypeIds) => componentTypeIds
|
|
3632
|
+
],
|
|
3633
|
+
(userForms, revisions, componentTypeIds) => {
|
|
3634
|
+
const componentTypeIdsSet = new Set(componentTypeIds);
|
|
3635
|
+
const formsOfComponentTypes = {};
|
|
3636
|
+
const ret = {};
|
|
3637
|
+
for (const form of Object.values(userForms)) {
|
|
3638
|
+
if (form.component_type && componentTypeIdsSet.has(form.component_type)) {
|
|
3639
|
+
formsOfComponentTypes[form.offline_id] = form;
|
|
3640
|
+
}
|
|
3641
|
+
}
|
|
3642
|
+
for (const revision of Object.values(revisions)) {
|
|
3643
|
+
const form = formsOfComponentTypes[revision.form];
|
|
3644
|
+
if (!form || !form.component_type || ret[form.component_type] && formRevisionSortFn(ret[form.component_type], revision) > 0)
|
|
3645
|
+
continue;
|
|
3646
|
+
ret[form.component_type] = revision;
|
|
3647
|
+
}
|
|
3648
|
+
return ret;
|
|
3649
|
+
}
|
|
3650
|
+
)
|
|
3651
|
+
);
|
|
3652
|
+
const selectLatestFormRevisionByForm = toolkit.createSelector([selectFormRevisionMapping], (revisions) => {
|
|
3653
|
+
const latestRevisions = {};
|
|
3654
|
+
for (const revision of Object.values(revisions)) {
|
|
3655
|
+
const formId2 = revision.form;
|
|
3656
|
+
const currentLatestRevision = latestRevisions[formId2];
|
|
3657
|
+
if (!currentLatestRevision || currentLatestRevision.revision < revision.revision) {
|
|
3658
|
+
latestRevisions[formId2] = revision;
|
|
3659
|
+
}
|
|
3660
|
+
}
|
|
3661
|
+
return latestRevisions;
|
|
3662
|
+
});
|
|
3663
|
+
const selectUserFormRevisionAttachmentsMapping = (state) => {
|
|
3664
|
+
return state.formRevisionReducer.attachments;
|
|
3665
|
+
};
|
|
3666
|
+
const selectAttachmentsOfFormRevision = restructureCreateSelectorWithArgs(
|
|
3667
|
+
toolkit.createSelector(
|
|
3668
|
+
[selectUserFormRevisionAttachmentsMapping, (_state, revisionId) => revisionId],
|
|
3669
|
+
(attachments, revisionId) => {
|
|
3670
|
+
return Object.values(attachments).filter((attachment) => attachment.revision === revisionId);
|
|
3671
|
+
}
|
|
3672
|
+
)
|
|
3673
|
+
);
|
|
3674
|
+
const formRevisionReducer = formRevisionsSlice.reducer;
|
|
3675
|
+
const initialState$5 = {
|
|
3676
|
+
forms: {}
|
|
3677
|
+
};
|
|
3678
|
+
const formSlice = toolkit.createSlice({
|
|
3679
|
+
name: "forms",
|
|
3680
|
+
initialState: initialState$5,
|
|
3681
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$5)),
|
|
3682
|
+
reducers: {
|
|
3683
|
+
setForms: (state, action) => {
|
|
3684
|
+
state.forms = {};
|
|
3685
|
+
action.payload.forEach((userForm) => {
|
|
3686
|
+
state.forms[userForm.offline_id] = userForm;
|
|
3597
3687
|
});
|
|
3598
3688
|
},
|
|
3689
|
+
addForm: (state, action) => {
|
|
3690
|
+
state.forms[action.payload.offline_id] = action.payload;
|
|
3691
|
+
},
|
|
3692
|
+
addForms: (state, action) => {
|
|
3693
|
+
for (const userForm of action.payload) {
|
|
3694
|
+
state.forms[userForm.offline_id] = userForm;
|
|
3695
|
+
}
|
|
3696
|
+
},
|
|
3599
3697
|
favoriteForm: (state, action) => {
|
|
3600
3698
|
const { formId: formId2 } = action.payload;
|
|
3601
|
-
const form = state.
|
|
3699
|
+
const form = state.forms[formId2];
|
|
3602
3700
|
if (!form) {
|
|
3603
3701
|
throw new Error("No form exists with the id " + formId2);
|
|
3604
3702
|
}
|
|
@@ -3606,48 +3704,23 @@ var __publicField = (obj, key, value) => {
|
|
|
3606
3704
|
},
|
|
3607
3705
|
unfavoriteForm: (state, action) => {
|
|
3608
3706
|
const { formId: formId2 } = action.payload;
|
|
3609
|
-
const form = state.
|
|
3707
|
+
const form = state.forms[formId2];
|
|
3610
3708
|
if (!form) {
|
|
3611
3709
|
throw new Error("No form exists with the id " + formId2);
|
|
3612
3710
|
}
|
|
3613
3711
|
form.favorite = false;
|
|
3614
3712
|
},
|
|
3615
|
-
|
|
3616
|
-
delete state.
|
|
3713
|
+
deleteForm: (state, action) => {
|
|
3714
|
+
delete state.forms[action.payload];
|
|
3617
3715
|
}
|
|
3618
3716
|
}
|
|
3619
3717
|
});
|
|
3620
|
-
const {
|
|
3621
|
-
|
|
3622
|
-
addUserForms,
|
|
3623
|
-
addUserFormRevisions,
|
|
3624
|
-
updateOrCreateUserFormSubmission,
|
|
3625
|
-
addUserFormSubmissions,
|
|
3626
|
-
deleteUserFormSubmission,
|
|
3627
|
-
deleteUserFormSubmissions,
|
|
3628
|
-
favoriteForm,
|
|
3629
|
-
unfavoriteForm,
|
|
3630
|
-
deleteUserForm,
|
|
3631
|
-
deleteUserFormRevision,
|
|
3632
|
-
deleteUserFormRevisions,
|
|
3633
|
-
setUserFormSubmissions,
|
|
3634
|
-
addUserFormRevision,
|
|
3635
|
-
addUserFormSubmissionAttachment,
|
|
3636
|
-
addUserFormRevisionAttachment,
|
|
3637
|
-
setUserFormSubmissionAttachments,
|
|
3638
|
-
setUserFormRevisionAttachments
|
|
3639
|
-
} = userFormSlice.actions;
|
|
3640
|
-
const selectSubmissionAttachments = (submissionId) => (state) => {
|
|
3641
|
-
return state.userFormReducer.submissionAttachments[submissionId] || [];
|
|
3642
|
-
};
|
|
3643
|
-
const selectRevisionAttachments = (revisionId) => (state) => {
|
|
3644
|
-
return state.userFormReducer.revisionAttachments[revisionId] || [];
|
|
3645
|
-
};
|
|
3646
|
-
const selectFilteredUserForms = restructureCreateSelectorWithArgs(
|
|
3718
|
+
const { setForms, addForm, addForms, favoriteForm, unfavoriteForm, deleteForm } = formSlice.actions;
|
|
3719
|
+
const selectFilteredForms = restructureCreateSelectorWithArgs(
|
|
3647
3720
|
toolkit.createSelector(
|
|
3648
3721
|
[
|
|
3649
|
-
(state) => state.
|
|
3650
|
-
(state) => state.
|
|
3722
|
+
(state) => state.formReducer.forms,
|
|
3723
|
+
(state) => state.formRevisionReducer.formRevisions,
|
|
3651
3724
|
(_state, search) => search
|
|
3652
3725
|
],
|
|
3653
3726
|
(userForms, revisions, search) => {
|
|
@@ -3681,63 +3754,188 @@ var __publicField = (obj, key, value) => {
|
|
|
3681
3754
|
{ memoizeOptions: { equalityCheck: reactRedux.shallowEqual } }
|
|
3682
3755
|
)
|
|
3683
3756
|
);
|
|
3684
|
-
const
|
|
3685
|
-
return state.
|
|
3757
|
+
const selectForm = (formId2) => (state) => {
|
|
3758
|
+
return state.formReducer.forms[formId2];
|
|
3686
3759
|
};
|
|
3687
|
-
const
|
|
3688
|
-
|
|
3689
|
-
for (const candidate of Object.values(revisions)) {
|
|
3690
|
-
if (candidate.form === formId2 && (!ret || ret.revision < candidate.revision)) {
|
|
3691
|
-
ret = candidate;
|
|
3692
|
-
}
|
|
3693
|
-
}
|
|
3694
|
-
if (!ret) {
|
|
3695
|
-
throw new Error("No revision found for form " + formId2);
|
|
3696
|
-
}
|
|
3697
|
-
return ret;
|
|
3760
|
+
const selectFormMapping = (state) => {
|
|
3761
|
+
return state.formReducer.forms;
|
|
3698
3762
|
};
|
|
3699
|
-
const
|
|
3763
|
+
const selectFormOfComponentType = restructureCreateSelectorWithArgs(
|
|
3700
3764
|
toolkit.createSelector(
|
|
3701
|
-
[
|
|
3702
|
-
(
|
|
3703
|
-
|
|
3704
|
-
throw new Error("formId is required");
|
|
3705
|
-
}
|
|
3706
|
-
return _selectLatestFormRevision(revisions, formId2);
|
|
3765
|
+
[selectFormMapping, (_state, componentTypeId) => componentTypeId],
|
|
3766
|
+
(userForms, componentTypeId) => {
|
|
3767
|
+
return Object.values(userForms).find((userForm) => userForm.component_type === componentTypeId);
|
|
3707
3768
|
}
|
|
3708
3769
|
)
|
|
3709
3770
|
);
|
|
3710
|
-
const
|
|
3711
|
-
return
|
|
3712
|
-
};
|
|
3713
|
-
const
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3717
|
-
const
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3771
|
+
const selectFormsCount = toolkit.createSelector([selectFormMapping], (userForms) => {
|
|
3772
|
+
return Object.keys(userForms).length;
|
|
3773
|
+
});
|
|
3774
|
+
const selectGeneralFormCount = toolkit.createSelector([selectFormMapping], (userForms) => {
|
|
3775
|
+
return Object.values(userForms).filter((form) => !form.component_type).length;
|
|
3776
|
+
});
|
|
3777
|
+
const formReducer = formSlice.reducer;
|
|
3778
|
+
const initialState$4 = {
|
|
3779
|
+
formSubmissions: {},
|
|
3780
|
+
attachments: {}
|
|
3781
|
+
};
|
|
3782
|
+
const formSubmissionSlice = toolkit.createSlice({
|
|
3783
|
+
name: "formSubmissions",
|
|
3784
|
+
initialState: initialState$4,
|
|
3785
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$4)),
|
|
3786
|
+
reducers: {
|
|
3787
|
+
setFormSubmission: (state, action) => {
|
|
3788
|
+
state.formSubmissions[action.payload.offline_id] = action.payload;
|
|
3789
|
+
},
|
|
3790
|
+
setFormSubmissions: (state, action) => {
|
|
3791
|
+
state.formSubmissions = {};
|
|
3792
|
+
for (const submission of action.payload) {
|
|
3793
|
+
state.formSubmissions[submission.offline_id] = submission;
|
|
3794
|
+
}
|
|
3795
|
+
},
|
|
3796
|
+
addFormSubmission: (state, action) => {
|
|
3797
|
+
if (action.payload.offline_id in state.formSubmissions) {
|
|
3798
|
+
throw new Error(`Submission with offline_id ${action.payload.offline_id} already exists`);
|
|
3799
|
+
}
|
|
3800
|
+
state.formSubmissions[action.payload.offline_id] = action.payload;
|
|
3801
|
+
},
|
|
3802
|
+
addFormSubmissions: (state, action) => {
|
|
3803
|
+
for (const submission of action.payload) {
|
|
3804
|
+
if (state.formSubmissions[submission.offline_id] !== void 0) {
|
|
3805
|
+
throw new Error(`Submission with offline_id ${submission.offline_id} already exists`);
|
|
3806
|
+
}
|
|
3807
|
+
}
|
|
3808
|
+
for (const submission of action.payload) {
|
|
3809
|
+
state.formSubmissions[submission.offline_id] = submission;
|
|
3810
|
+
}
|
|
3811
|
+
},
|
|
3812
|
+
updateFormSubmission: (state, action) => {
|
|
3813
|
+
if (state.formSubmissions[action.payload.offline_id] === void 0) {
|
|
3814
|
+
throw new Error(`Submission with offline_id ${action.payload.offline_id} does not exist`);
|
|
3815
|
+
}
|
|
3816
|
+
state.formSubmissions[action.payload.offline_id] = action.payload;
|
|
3817
|
+
},
|
|
3818
|
+
updateFormSubmissions: (state, action) => {
|
|
3819
|
+
for (const submission of action.payload) {
|
|
3820
|
+
if (state.formSubmissions[submission.offline_id] === void 0) {
|
|
3821
|
+
throw new Error(`Submission with offline_id ${submission.offline_id} does not exist`);
|
|
3822
|
+
}
|
|
3823
|
+
}
|
|
3824
|
+
for (const submission of action.payload) {
|
|
3825
|
+
state.formSubmissions[submission.offline_id] = submission;
|
|
3826
|
+
}
|
|
3827
|
+
},
|
|
3828
|
+
deleteFormSubmission: (state, action) => {
|
|
3829
|
+
if (state.formSubmissions[action.payload] === void 0) {
|
|
3830
|
+
throw new Error(`Submission with offline_id ${action.payload} does not exist`);
|
|
3831
|
+
}
|
|
3832
|
+
delete state.formSubmissions[action.payload];
|
|
3833
|
+
},
|
|
3834
|
+
deleteFormSubmissions: (state, action) => {
|
|
3835
|
+
for (const offlineId of action.payload) {
|
|
3836
|
+
if (state.formSubmissions[offlineId] === void 0) {
|
|
3837
|
+
throw new Error(`Submission with offline_id ${offlineId} does not exist`);
|
|
3838
|
+
}
|
|
3839
|
+
delete state.formSubmissions[offlineId];
|
|
3840
|
+
}
|
|
3841
|
+
for (const offlineId of action.payload) {
|
|
3842
|
+
delete state.formSubmissions[offlineId];
|
|
3843
|
+
}
|
|
3844
|
+
},
|
|
3845
|
+
// Attachments
|
|
3846
|
+
addFormSubmissionAttachment: (state, action) => {
|
|
3847
|
+
if (state.attachments[action.payload.offline_id] !== void 0) {
|
|
3848
|
+
throw new Error(`Attachment with offline_id ${action.payload.offline_id} already exists`);
|
|
3849
|
+
}
|
|
3850
|
+
state.attachments[action.payload.offline_id] = action.payload;
|
|
3851
|
+
},
|
|
3852
|
+
addFormSubmissionAttachments: (state, action) => {
|
|
3853
|
+
for (const attachment of action.payload) {
|
|
3854
|
+
if (state.attachments[attachment.offline_id] !== void 0) {
|
|
3855
|
+
throw new Error(`Attachment with offline_id ${attachment.offline_id} already exists`);
|
|
3856
|
+
}
|
|
3857
|
+
}
|
|
3858
|
+
for (const attachment of action.payload) {
|
|
3859
|
+
state.attachments[attachment.offline_id] = attachment;
|
|
3860
|
+
}
|
|
3861
|
+
},
|
|
3862
|
+
// We only need a multi set for attachments because they are not updated, only added and deleted
|
|
3863
|
+
setFormSubmissionAttachments: (state, action) => {
|
|
3864
|
+
state.attachments = {};
|
|
3865
|
+
for (const attachment of action.payload) {
|
|
3866
|
+
state.attachments[attachment.offline_id] = attachment;
|
|
3867
|
+
}
|
|
3868
|
+
},
|
|
3869
|
+
updateFormSubmissionAttachments: (state, action) => {
|
|
3870
|
+
for (const attachment of action.payload) {
|
|
3871
|
+
if (state.attachments[attachment.offline_id] === void 0) {
|
|
3872
|
+
throw new Error(`Attachment with offline_id ${attachment.offline_id} does not exist`);
|
|
3873
|
+
}
|
|
3874
|
+
}
|
|
3875
|
+
for (const attachment of action.payload) {
|
|
3876
|
+
state.attachments[attachment.offline_id] = attachment;
|
|
3877
|
+
}
|
|
3878
|
+
},
|
|
3879
|
+
// The delete actions for UserFormSubmissionAttachments are not used in the app, but are included for completeness
|
|
3880
|
+
// Could be used if editing a submission is ever supported, will be applicable for supporting tip tap content in submissions
|
|
3881
|
+
deleteFormSubmissionAttachment: (state, action) => {
|
|
3882
|
+
if (state.attachments[action.payload] === void 0) {
|
|
3883
|
+
throw new Error(`Attachment with offline_id ${action.payload} does not exist`);
|
|
3884
|
+
}
|
|
3885
|
+
delete state.attachments[action.payload];
|
|
3886
|
+
},
|
|
3887
|
+
deleteFormSubmissionAttachments: (state, action) => {
|
|
3888
|
+
for (const offlineId of action.payload) {
|
|
3889
|
+
if (state.attachments[offlineId] === void 0) {
|
|
3890
|
+
throw new Error(`Attachment with offline_id ${offlineId} does not exist`);
|
|
3891
|
+
}
|
|
3892
|
+
delete state.attachments[offlineId];
|
|
3893
|
+
}
|
|
3894
|
+
}
|
|
3895
|
+
}
|
|
3896
|
+
});
|
|
3897
|
+
const {
|
|
3898
|
+
setFormSubmission,
|
|
3899
|
+
setFormSubmissions,
|
|
3900
|
+
addFormSubmission,
|
|
3901
|
+
addFormSubmissions,
|
|
3902
|
+
updateFormSubmission,
|
|
3903
|
+
updateFormSubmissions,
|
|
3904
|
+
deleteFormSubmission,
|
|
3905
|
+
deleteFormSubmissions,
|
|
3906
|
+
addFormSubmissionAttachment,
|
|
3907
|
+
addFormSubmissionAttachments,
|
|
3908
|
+
setFormSubmissionAttachments,
|
|
3909
|
+
updateFormSubmissionAttachments,
|
|
3910
|
+
deleteFormSubmissionAttachment,
|
|
3911
|
+
deleteFormSubmissionAttachments
|
|
3912
|
+
} = formSubmissionSlice.actions;
|
|
3913
|
+
const selectFormSubmissionsMapping = (state) => {
|
|
3914
|
+
return state.formSubmissionReducer.formSubmissions;
|
|
3915
|
+
};
|
|
3916
|
+
const selectFormSubmissions = toolkit.createSelector(
|
|
3917
|
+
[selectFormSubmissionsMapping],
|
|
3918
|
+
(submissions) => {
|
|
3919
|
+
return Object.values(submissions);
|
|
3920
|
+
}
|
|
3726
3921
|
);
|
|
3727
|
-
const
|
|
3922
|
+
const selectFormSubmission = (submissionId) => (state) => {
|
|
3923
|
+
return state.formSubmissionReducer.formSubmissions[submissionId];
|
|
3924
|
+
};
|
|
3925
|
+
const selectFormSubmissionsOfForm = restructureCreateSelectorWithArgs(
|
|
3728
3926
|
toolkit.createSelector(
|
|
3729
|
-
[
|
|
3927
|
+
[selectFormSubmissions, selectFormRevisionMapping, (_state, formId2) => formId2],
|
|
3730
3928
|
(submissions, revisionMapping, formId2) => {
|
|
3731
|
-
return
|
|
3929
|
+
return submissions.filter((submission) => {
|
|
3732
3930
|
const revision = revisionMapping[submission.form_revision];
|
|
3733
3931
|
return (revision == null ? void 0 : revision.form) === formId2;
|
|
3734
3932
|
});
|
|
3735
3933
|
}
|
|
3736
3934
|
)
|
|
3737
3935
|
);
|
|
3738
|
-
const
|
|
3936
|
+
const selectFormSubmissionsOfIssue = restructureCreateSelectorWithArgs(
|
|
3739
3937
|
toolkit.createSelector(
|
|
3740
|
-
[
|
|
3938
|
+
[selectFormSubmissions, (_state, issueId) => issueId],
|
|
3741
3939
|
(submissions, issueId) => {
|
|
3742
3940
|
return Object.values(submissions).filter((submission) => {
|
|
3743
3941
|
return submission.issue === issueId;
|
|
@@ -3745,9 +3943,9 @@ var __publicField = (obj, key, value) => {
|
|
|
3745
3943
|
}
|
|
3746
3944
|
)
|
|
3747
3945
|
);
|
|
3748
|
-
const
|
|
3946
|
+
const selectFormSubmissionsOfComponent = restructureCreateSelectorWithArgs(
|
|
3749
3947
|
toolkit.createSelector(
|
|
3750
|
-
[
|
|
3948
|
+
[selectFormSubmissions, (_state, componentId) => componentId],
|
|
3751
3949
|
(submissions, componentId) => {
|
|
3752
3950
|
return submissions.filter((submission) => {
|
|
3753
3951
|
return submission.component === componentId;
|
|
@@ -3755,8 +3953,8 @@ var __publicField = (obj, key, value) => {
|
|
|
3755
3953
|
}
|
|
3756
3954
|
)
|
|
3757
3955
|
);
|
|
3758
|
-
const
|
|
3759
|
-
[
|
|
3956
|
+
const selectFormSubmissionsByComponents = toolkit.createSelector(
|
|
3957
|
+
[selectFormSubmissionsMapping, selectComponentsMapping],
|
|
3760
3958
|
(submissions, components) => {
|
|
3761
3959
|
var _a2;
|
|
3762
3960
|
const componentSubmissionMapping = {};
|
|
@@ -3770,62 +3968,26 @@ var __publicField = (obj, key, value) => {
|
|
|
3770
3968
|
}
|
|
3771
3969
|
}
|
|
3772
3970
|
return componentSubmissionMapping;
|
|
3773
|
-
}
|
|
3774
|
-
);
|
|
3775
|
-
const selectUserFormMapping = (state) => {
|
|
3776
|
-
return state.userFormReducer.userForms;
|
|
3777
|
-
};
|
|
3778
|
-
const selectComponentTypeForm = restructureCreateSelectorWithArgs(
|
|
3779
|
-
toolkit.createSelector(
|
|
3780
|
-
[selectUserFormMapping, (_state, componentTypeId) => componentTypeId],
|
|
3781
|
-
(userForms, componentTypeId) => {
|
|
3782
|
-
return Object.values(userForms).find((userForm) => userForm.component_type === componentTypeId);
|
|
3783
|
-
}
|
|
3784
|
-
)
|
|
3971
|
+
}
|
|
3785
3972
|
);
|
|
3786
|
-
const
|
|
3973
|
+
const selectFormSubmissionAttachmentsMapping = (state) => {
|
|
3974
|
+
return state.formSubmissionReducer.attachments;
|
|
3975
|
+
};
|
|
3976
|
+
const selectAttachmentsOfFormSubmission = restructureCreateSelectorWithArgs(
|
|
3787
3977
|
toolkit.createSelector(
|
|
3788
|
-
[
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
(_state, componentTypeIds) => componentTypeIds
|
|
3792
|
-
],
|
|
3793
|
-
(userForms, revisions, componentTypeIds) => {
|
|
3794
|
-
const componentTypeIdsSet = new Set(componentTypeIds);
|
|
3795
|
-
const ret = {};
|
|
3796
|
-
for (const form of Object.values(userForms)) {
|
|
3797
|
-
if (form.component_type && componentTypeIdsSet.has(form.component_type)) {
|
|
3798
|
-
ret[form.component_type] = _selectLatestFormRevision(revisions, form.offline_id);
|
|
3799
|
-
}
|
|
3800
|
-
}
|
|
3801
|
-
return ret;
|
|
3978
|
+
[selectFormSubmissionAttachmentsMapping, (_state, submissionId) => submissionId],
|
|
3979
|
+
(attachmentsMapping, submissionId) => {
|
|
3980
|
+
return Object.values(attachmentsMapping).filter((attachment) => attachment.submission === submissionId);
|
|
3802
3981
|
}
|
|
3803
3982
|
)
|
|
3804
3983
|
);
|
|
3805
|
-
const
|
|
3806
|
-
|
|
3807
|
-
for (const revision of Object.values(revisions)) {
|
|
3808
|
-
const formId2 = revision.form;
|
|
3809
|
-
const currentLatestRevision = latestRevisions[formId2];
|
|
3810
|
-
if (!currentLatestRevision || currentLatestRevision.revision < revision.revision) {
|
|
3811
|
-
latestRevisions[formId2] = revision;
|
|
3812
|
-
}
|
|
3813
|
-
}
|
|
3814
|
-
return latestRevisions;
|
|
3815
|
-
});
|
|
3816
|
-
const selectNumberOfUserForms = toolkit.createSelector([selectUserFormMapping], (userForms) => {
|
|
3817
|
-
return Object.keys(userForms).length;
|
|
3818
|
-
});
|
|
3819
|
-
const selectNumberOfGeneralUserForms = toolkit.createSelector([selectUserFormMapping], (userForms) => {
|
|
3820
|
-
return Object.values(userForms).filter((form) => !form.component_type).length;
|
|
3821
|
-
});
|
|
3822
|
-
const userFormReducer = userFormSlice.reducer;
|
|
3823
|
-
const initialState$2 = {
|
|
3984
|
+
const formSubmissionReducer = formSubmissionSlice.reducer;
|
|
3985
|
+
const initialState$3 = {
|
|
3824
3986
|
emailDomains: {}
|
|
3825
3987
|
};
|
|
3826
3988
|
const emailDomainsSlice = toolkit.createSlice({
|
|
3827
3989
|
name: "emailDomains",
|
|
3828
|
-
initialState: initialState$
|
|
3990
|
+
initialState: initialState$3,
|
|
3829
3991
|
reducers: {
|
|
3830
3992
|
setEmailDomains: (state, action) => {
|
|
3831
3993
|
const emailDomains = {};
|
|
@@ -3852,15 +4014,15 @@ var __publicField = (obj, key, value) => {
|
|
|
3852
4014
|
(ed1, ed2) => ed1.domain.localeCompare(ed2.domain)
|
|
3853
4015
|
);
|
|
3854
4016
|
const emailDomainsReducer = emailDomainsSlice.reducer;
|
|
3855
|
-
const initialState$
|
|
4017
|
+
const initialState$2 = {
|
|
3856
4018
|
documents: {},
|
|
3857
4019
|
attachments: {}
|
|
3858
4020
|
};
|
|
3859
4021
|
const documentSlice = toolkit.createSlice({
|
|
3860
4022
|
name: "documents",
|
|
3861
|
-
initialState: initialState$
|
|
4023
|
+
initialState: initialState$2,
|
|
3862
4024
|
extraReducers: (builder) => builder.addCase("RESET", (state) => {
|
|
3863
|
-
Object.assign(state, initialState$
|
|
4025
|
+
Object.assign(state, initialState$2);
|
|
3864
4026
|
}),
|
|
3865
4027
|
reducers: {
|
|
3866
4028
|
setDocuments: (state, action) => {
|
|
@@ -4076,6 +4238,62 @@ var __publicField = (obj, key, value) => {
|
|
|
4076
4238
|
)
|
|
4077
4239
|
);
|
|
4078
4240
|
const documentsReducer = documentSlice.reducer;
|
|
4241
|
+
const initialState$1 = {
|
|
4242
|
+
teams: {}
|
|
4243
|
+
};
|
|
4244
|
+
const teamSlice = toolkit.createSlice({
|
|
4245
|
+
name: "teams",
|
|
4246
|
+
initialState: initialState$1,
|
|
4247
|
+
extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$1)),
|
|
4248
|
+
reducers: {
|
|
4249
|
+
setTeam: (state, action) => {
|
|
4250
|
+
state.teams[action.payload.offline_id] = action.payload;
|
|
4251
|
+
},
|
|
4252
|
+
setTeams: (state, action) => {
|
|
4253
|
+
state.teams = {};
|
|
4254
|
+
for (const team of action.payload) {
|
|
4255
|
+
state.teams[team.offline_id] = team;
|
|
4256
|
+
}
|
|
4257
|
+
},
|
|
4258
|
+
addTeam: (state, action) => {
|
|
4259
|
+
if (state.teams[action.payload.offline_id]) {
|
|
4260
|
+
throw new Error(`Team with offline_id ${action.payload.offline_id} already exists`);
|
|
4261
|
+
}
|
|
4262
|
+
state.teams[action.payload.offline_id] = action.payload;
|
|
4263
|
+
},
|
|
4264
|
+
updateTeam: (state, action) => {
|
|
4265
|
+
if (!state.teams[action.payload.offline_id]) {
|
|
4266
|
+
throw new Error(`Team with offline_id ${action.payload.offline_id} does not exist`);
|
|
4267
|
+
}
|
|
4268
|
+
state.teams[action.payload.offline_id] = action.payload;
|
|
4269
|
+
},
|
|
4270
|
+
deleteTeam: (state, action) => {
|
|
4271
|
+
delete state.teams[action.payload];
|
|
4272
|
+
}
|
|
4273
|
+
}
|
|
4274
|
+
});
|
|
4275
|
+
const { setTeam, setTeams, addTeam, updateTeam, deleteTeam } = teamSlice.actions;
|
|
4276
|
+
const selectTeamsMapping = (state) => state.teamReducer.teams;
|
|
4277
|
+
const selectTeams = toolkit.createSelector([selectTeamsMapping], (teams) => {
|
|
4278
|
+
return Object.values(teams);
|
|
4279
|
+
});
|
|
4280
|
+
const selectTeam = (teamId) => (state) => {
|
|
4281
|
+
return state.teamReducer.teams[teamId];
|
|
4282
|
+
};
|
|
4283
|
+
const selectTeamsOfOrganization = restructureCreateSelectorWithArgs(
|
|
4284
|
+
toolkit.createSelector(
|
|
4285
|
+
[selectTeams, (_state, organizationId) => organizationId],
|
|
4286
|
+
(teams, organizationId) => {
|
|
4287
|
+
return teams.filter((team) => team.organization === organizationId);
|
|
4288
|
+
}
|
|
4289
|
+
)
|
|
4290
|
+
);
|
|
4291
|
+
const selectTeamsOfUser = restructureCreateSelectorWithArgs(
|
|
4292
|
+
toolkit.createSelector([selectTeams, (_state, userId) => userId], (teams, userId) => {
|
|
4293
|
+
return teams.filter((team) => team.members.includes(userId));
|
|
4294
|
+
})
|
|
4295
|
+
);
|
|
4296
|
+
const teamReducer = teamSlice.reducer;
|
|
4079
4297
|
const initialState = {
|
|
4080
4298
|
version: 0
|
|
4081
4299
|
};
|
|
@@ -4117,12 +4335,15 @@ var __publicField = (obj, key, value) => {
|
|
|
4117
4335
|
projectFileReducer,
|
|
4118
4336
|
rehydratedReducer,
|
|
4119
4337
|
settingReducer,
|
|
4120
|
-
|
|
4338
|
+
formReducer,
|
|
4339
|
+
formRevisionReducer,
|
|
4340
|
+
formSubmissionReducer,
|
|
4121
4341
|
userReducer,
|
|
4122
4342
|
workspaceReducer,
|
|
4123
4343
|
emailDomainsReducer,
|
|
4124
4344
|
licenseReducer,
|
|
4125
|
-
documentsReducer
|
|
4345
|
+
documentsReducer,
|
|
4346
|
+
teamReducer
|
|
4126
4347
|
};
|
|
4127
4348
|
const overmapReducer = toolkit.combineReducers(overmapReducers);
|
|
4128
4349
|
const resetStore = "RESET";
|
|
@@ -4170,9 +4391,7 @@ var __publicField = (obj, key, value) => {
|
|
|
4170
4391
|
throw new Error(`Failed to update index_workspace of issue ${issue.offline_id} to main workspace`);
|
|
4171
4392
|
}
|
|
4172
4393
|
}
|
|
4173
|
-
const indexedForms = Object.values(draft.
|
|
4174
|
-
(form) => form.index_workspace === workspaceId
|
|
4175
|
-
);
|
|
4394
|
+
const indexedForms = Object.values(draft.formReducer.forms).filter((form) => form.index_workspace === workspaceId);
|
|
4176
4395
|
for (const form of indexedForms) {
|
|
4177
4396
|
form.index_workspace = mainWorkspace.offline_id;
|
|
4178
4397
|
}
|
|
@@ -6363,6 +6582,7 @@ var __publicField = (obj, key, value) => {
|
|
|
6363
6582
|
}
|
|
6364
6583
|
if (currentOrgId) {
|
|
6365
6584
|
await this.client.organizations.fetchInitialOrganizationData(currentOrgId, false);
|
|
6585
|
+
void this.client.teams.refreshStore();
|
|
6366
6586
|
}
|
|
6367
6587
|
if (!isProjectIdValid) {
|
|
6368
6588
|
if (validProjects.length !== 0) {
|
|
@@ -6800,7 +7020,7 @@ var __publicField = (obj, key, value) => {
|
|
|
6800
7020
|
...revisionAttachmentPayload,
|
|
6801
7021
|
file: URL.createObjectURL(image)
|
|
6802
7022
|
};
|
|
6803
|
-
store.dispatch(
|
|
7023
|
+
store.dispatch(addFormRevisionAttachment(offlinePayload));
|
|
6804
7024
|
return attach;
|
|
6805
7025
|
});
|
|
6806
7026
|
});
|
|
@@ -6815,13 +7035,14 @@ var __publicField = (obj, key, value) => {
|
|
|
6815
7035
|
};
|
|
6816
7036
|
const currentUser = state.userReducer.currentUser;
|
|
6817
7037
|
const activeWorkspaceId = state.workspaceReducer.activeWorkspaceId;
|
|
7038
|
+
const submittedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
6818
7039
|
const offlineFormPayload = offline({});
|
|
6819
|
-
const offlineRevisionPayload = offline(initialRevision);
|
|
7040
|
+
const offlineRevisionPayload = offline({ ...initialRevision, submitted_at: submittedAt });
|
|
6820
7041
|
const retForm = {
|
|
6821
7042
|
...offlineFormPayload,
|
|
6822
7043
|
index_workspace: activeWorkspaceId,
|
|
6823
7044
|
favorite: true,
|
|
6824
|
-
submitted_at:
|
|
7045
|
+
submitted_at: submittedAt,
|
|
6825
7046
|
created_by: currentUser.id,
|
|
6826
7047
|
...componentTypeId && { component_type: componentTypeId },
|
|
6827
7048
|
...ownerAttrs
|
|
@@ -6832,11 +7053,11 @@ var __publicField = (obj, key, value) => {
|
|
|
6832
7053
|
created_by: currentUser.id,
|
|
6833
7054
|
form: retForm.offline_id,
|
|
6834
7055
|
revision: 0,
|
|
6835
|
-
submitted_at:
|
|
7056
|
+
submitted_at: submittedAt
|
|
6836
7057
|
};
|
|
6837
7058
|
const { store } = this.client;
|
|
6838
|
-
store.dispatch(
|
|
6839
|
-
store.dispatch(
|
|
7059
|
+
store.dispatch(addForm(retForm));
|
|
7060
|
+
store.dispatch(addFormRevision(retRevision));
|
|
6840
7061
|
const formPromise = this.enqueueRequest({
|
|
6841
7062
|
description: "Create form",
|
|
6842
7063
|
method: HttpMethod.POST,
|
|
@@ -6854,8 +7075,8 @@ var __publicField = (obj, key, value) => {
|
|
|
6854
7075
|
});
|
|
6855
7076
|
const attachImagesPromises = this.getAttachImagePromises(images, offlineRevisionPayload.offline_id);
|
|
6856
7077
|
void formPromise.catch((e) => {
|
|
6857
|
-
store.dispatch(
|
|
6858
|
-
store.dispatch(
|
|
7078
|
+
store.dispatch(deleteForm(retForm.offline_id));
|
|
7079
|
+
store.dispatch(deleteFormRevision(retRevision.offline_id));
|
|
6859
7080
|
throw e;
|
|
6860
7081
|
});
|
|
6861
7082
|
const settledPromise = Promise.all([formPromise, ...attachImagesPromises]).then(() => formPromise);
|
|
@@ -6898,7 +7119,7 @@ var __publicField = (obj, key, value) => {
|
|
|
6898
7119
|
form: formId2,
|
|
6899
7120
|
submitted_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
6900
7121
|
};
|
|
6901
|
-
store.dispatch(
|
|
7122
|
+
store.dispatch(addFormRevision(fullRevision));
|
|
6902
7123
|
const promise = this.enqueueRequest({
|
|
6903
7124
|
description: "Create form revision",
|
|
6904
7125
|
method: HttpMethod.PATCH,
|
|
@@ -6912,9 +7133,9 @@ var __publicField = (obj, key, value) => {
|
|
|
6912
7133
|
});
|
|
6913
7134
|
const attachImagesPromises = this.getAttachImagePromises(images, offlineRevision.offline_id);
|
|
6914
7135
|
void promise.then((result) => {
|
|
6915
|
-
store.dispatch(
|
|
7136
|
+
store.dispatch(setFormRevision(result));
|
|
6916
7137
|
}).catch(() => {
|
|
6917
|
-
store.dispatch(
|
|
7138
|
+
store.dispatch(deleteFormRevision(fullRevision.offline_id));
|
|
6918
7139
|
});
|
|
6919
7140
|
const settledPromise = Promise.all([promise, ...attachImagesPromises]).then(() => promise);
|
|
6920
7141
|
return [fullRevision, settledPromise];
|
|
@@ -6956,19 +7177,19 @@ var __publicField = (obj, key, value) => {
|
|
|
6956
7177
|
async delete(formId2) {
|
|
6957
7178
|
const { store } = this.client;
|
|
6958
7179
|
const state = store.getState();
|
|
6959
|
-
const userForm =
|
|
7180
|
+
const userForm = selectForm(formId2)(state);
|
|
6960
7181
|
if (!userForm) {
|
|
6961
7182
|
throw new Error("Expected userForm to exist");
|
|
6962
7183
|
}
|
|
6963
|
-
const userFormSubmissions =
|
|
7184
|
+
const userFormSubmissions = selectFormSubmissionsOfForm(formId2)(state);
|
|
6964
7185
|
if (userFormSubmissions && userFormSubmissions.length > 0) {
|
|
6965
|
-
store.dispatch(
|
|
7186
|
+
store.dispatch(deleteFormSubmissions(userFormSubmissions.map(({ offline_id }) => offline_id)));
|
|
6966
7187
|
}
|
|
6967
|
-
const userFormRevisions =
|
|
7188
|
+
const userFormRevisions = selectFormRevisionsOfForm(formId2)(state);
|
|
6968
7189
|
if (userFormRevisions && userFormRevisions.length > 0) {
|
|
6969
|
-
store.dispatch(
|
|
7190
|
+
store.dispatch(deleteFormRevisions(userFormRevisions.map(({ offline_id }) => offline_id)));
|
|
6970
7191
|
}
|
|
6971
|
-
store.dispatch(
|
|
7192
|
+
store.dispatch(deleteForm(formId2));
|
|
6972
7193
|
try {
|
|
6973
7194
|
return await this.enqueueRequest({
|
|
6974
7195
|
description: "Delete form",
|
|
@@ -6978,12 +7199,12 @@ var __publicField = (obj, key, value) => {
|
|
|
6978
7199
|
blocks: []
|
|
6979
7200
|
});
|
|
6980
7201
|
} catch (e) {
|
|
6981
|
-
store.dispatch(
|
|
7202
|
+
store.dispatch(addForm(userForm));
|
|
6982
7203
|
if (userFormRevisions && userFormRevisions.length > 0) {
|
|
6983
|
-
store.dispatch(
|
|
7204
|
+
store.dispatch(addFormRevisions(userFormRevisions));
|
|
6984
7205
|
}
|
|
6985
7206
|
if (userFormSubmissions && userFormSubmissions.length > 0) {
|
|
6986
|
-
store.dispatch(
|
|
7207
|
+
store.dispatch(addFormSubmissions(userFormSubmissions));
|
|
6987
7208
|
}
|
|
6988
7209
|
throw e;
|
|
6989
7210
|
}
|
|
@@ -6997,16 +7218,15 @@ var __publicField = (obj, key, value) => {
|
|
|
6997
7218
|
blockers: [],
|
|
6998
7219
|
blocks: []
|
|
6999
7220
|
});
|
|
7000
|
-
store.dispatch(
|
|
7001
|
-
store.dispatch(
|
|
7002
|
-
store.dispatch(
|
|
7221
|
+
store.dispatch(setForms(Object.values(result.forms)));
|
|
7222
|
+
store.dispatch(setFormRevisions(Object.values(result.revisions)));
|
|
7223
|
+
store.dispatch(setFormRevisionAttachments(Object.values(result.attachments)));
|
|
7003
7224
|
}
|
|
7004
7225
|
}
|
|
7005
7226
|
const isArrayOfFiles = (value) => {
|
|
7006
7227
|
return Array.isArray(value) && value[0] instanceof File;
|
|
7007
7228
|
};
|
|
7008
|
-
const separateFilesFromValues = (
|
|
7009
|
-
const { values } = payload;
|
|
7229
|
+
const separateFilesFromValues = (values) => {
|
|
7010
7230
|
const files = {};
|
|
7011
7231
|
const newValues = {};
|
|
7012
7232
|
for (const key in values) {
|
|
@@ -7021,17 +7241,13 @@ var __publicField = (obj, key, value) => {
|
|
|
7021
7241
|
newValues[key] = value;
|
|
7022
7242
|
}
|
|
7023
7243
|
}
|
|
7024
|
-
|
|
7025
|
-
...payload,
|
|
7026
|
-
values: newValues
|
|
7027
|
-
};
|
|
7028
|
-
return { payloadWithoutFiles, files };
|
|
7244
|
+
return { values: newValues, files };
|
|
7029
7245
|
};
|
|
7030
7246
|
class UserFormSubmissionService extends BaseApiService {
|
|
7031
7247
|
constructor() {
|
|
7032
7248
|
super(...arguments);
|
|
7033
7249
|
// Attach files to submission, after uploading them to S3
|
|
7034
|
-
__publicField(this, "getAttachFilesPromises", (files,
|
|
7250
|
+
__publicField(this, "getAttachFilesPromises", (files, submission) => {
|
|
7035
7251
|
const { store } = this.client;
|
|
7036
7252
|
return Object.entries(files).map(async ([key, fileArray]) => {
|
|
7037
7253
|
const attachResults = [];
|
|
@@ -7041,24 +7257,27 @@ var __publicField = (obj, key, value) => {
|
|
|
7041
7257
|
const [fileProps] = await this.client.files.uploadFileToS3(sha1);
|
|
7042
7258
|
const submissionAttachmentPayload = offline({
|
|
7043
7259
|
...fileProps,
|
|
7044
|
-
submission:
|
|
7260
|
+
submission: submission.offline_id,
|
|
7045
7261
|
field_identifier: key
|
|
7046
7262
|
});
|
|
7047
7263
|
const attach = await this.enqueueRequest({
|
|
7048
7264
|
description: "Attach file to form submission",
|
|
7049
7265
|
method: HttpMethod.POST,
|
|
7050
|
-
url: `/forms/submission/${
|
|
7266
|
+
url: `/forms/submission/${submission.offline_id}/attachments/`,
|
|
7051
7267
|
payload: submissionAttachmentPayload,
|
|
7052
|
-
blockers: [
|
|
7053
|
-
|
|
7054
|
-
|
|
7268
|
+
blockers: [
|
|
7269
|
+
submission.component,
|
|
7270
|
+
submission.component_stage,
|
|
7271
|
+
submission.issue,
|
|
7272
|
+
submission.form_revision
|
|
7273
|
+
].filter((x) => x !== void 0),
|
|
7055
7274
|
blocks: [submissionAttachmentPayload.offline_id]
|
|
7056
7275
|
});
|
|
7057
7276
|
const offlinePayload = {
|
|
7058
7277
|
...submissionAttachmentPayload,
|
|
7059
7278
|
file: URL.createObjectURL(file)
|
|
7060
7279
|
};
|
|
7061
|
-
store.dispatch(
|
|
7280
|
+
store.dispatch(addFormSubmissionAttachment(offlinePayload));
|
|
7062
7281
|
attachResults.push(attach);
|
|
7063
7282
|
}
|
|
7064
7283
|
return attachResults;
|
|
@@ -7072,71 +7291,168 @@ var __publicField = (obj, key, value) => {
|
|
|
7072
7291
|
if (!activeProjectId) {
|
|
7073
7292
|
throw new Error("Expected an active project");
|
|
7074
7293
|
}
|
|
7075
|
-
const {
|
|
7294
|
+
const { values, files } = separateFilesFromValues(payload.values);
|
|
7295
|
+
const offlineSubmission = {
|
|
7296
|
+
...payload,
|
|
7297
|
+
values,
|
|
7298
|
+
created_by: state.userReducer.currentUser.id,
|
|
7299
|
+
submitted_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
7300
|
+
};
|
|
7076
7301
|
const promise = this.enqueueRequest({
|
|
7077
7302
|
description: "Respond to form",
|
|
7078
7303
|
method: HttpMethod.POST,
|
|
7079
7304
|
url: `/forms/revisions/${payload.form_revision}/respond/`,
|
|
7080
|
-
payload: { ...
|
|
7305
|
+
payload: { ...offlineSubmission, project: activeProjectId },
|
|
7081
7306
|
blockers: [payload.issue, payload.component, payload.component_stage, "add-form-entry"].filter(
|
|
7082
7307
|
(x) => x !== void 0
|
|
7083
7308
|
),
|
|
7084
7309
|
blocks: [payload.offline_id]
|
|
7085
7310
|
});
|
|
7086
|
-
const attachFilesPromises = this.getAttachFilesPromises(files,
|
|
7087
|
-
|
|
7088
|
-
const fullOfflineResult = {
|
|
7089
|
-
...payload,
|
|
7090
|
-
created_by: state.userReducer.currentUser.id,
|
|
7091
|
-
created_at: now,
|
|
7092
|
-
updated_at: now
|
|
7093
|
-
};
|
|
7094
|
-
const offlineResultWithoutFiles = {
|
|
7095
|
-
...fullOfflineResult,
|
|
7096
|
-
...payloadWithoutFiles
|
|
7097
|
-
};
|
|
7098
|
-
store.dispatch(updateOrCreateUserFormSubmission(offlineResultWithoutFiles));
|
|
7311
|
+
const attachFilesPromises = this.getAttachFilesPromises(files, offlineSubmission);
|
|
7312
|
+
store.dispatch(addFormSubmission(offlineSubmission));
|
|
7099
7313
|
void promise.then((result) => {
|
|
7100
7314
|
store.dispatch(addActiveProjectFormSubmissionsCount(1));
|
|
7101
|
-
store.dispatch(
|
|
7315
|
+
store.dispatch(setFormSubmission(result));
|
|
7102
7316
|
return result;
|
|
7103
7317
|
}).catch(() => {
|
|
7104
|
-
store.dispatch(
|
|
7318
|
+
store.dispatch(deleteFormSubmission(payload.offline_id));
|
|
7105
7319
|
store.dispatch(addActiveProjectFormSubmissionsCount(-1));
|
|
7106
7320
|
});
|
|
7107
7321
|
const settledPromise = Promise.all([promise, ...attachFilesPromises]).then(() => promise);
|
|
7108
|
-
return [
|
|
7322
|
+
return [offlineSubmission, settledPromise];
|
|
7109
7323
|
}
|
|
7110
|
-
|
|
7324
|
+
// Note currently the bulkAdd method is specific to form submissions for components
|
|
7325
|
+
// TODO: adapt the support bulk adding to any model type
|
|
7326
|
+
async bulkAdd(args) {
|
|
7327
|
+
const { formRevision, values: argsValues, componentOfflineIds } = args;
|
|
7111
7328
|
const { store } = this.client;
|
|
7112
|
-
const
|
|
7113
|
-
|
|
7114
|
-
|
|
7329
|
+
const offlineSubmissions = [];
|
|
7330
|
+
const offlineAttachments = [];
|
|
7331
|
+
const submissionOfflineIds = [];
|
|
7332
|
+
const submissionsPayload = [];
|
|
7333
|
+
const attachmentsPayload = [];
|
|
7334
|
+
const { values, files } = separateFilesFromValues(argsValues);
|
|
7335
|
+
const submittedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
7336
|
+
const createdBy = store.getState().userReducer.currentUser.id;
|
|
7337
|
+
for (const component_id of componentOfflineIds) {
|
|
7338
|
+
const submission = offline({
|
|
7339
|
+
form_revision: formRevision,
|
|
7340
|
+
values,
|
|
7341
|
+
created_by: createdBy,
|
|
7342
|
+
submitted_at: submittedAt,
|
|
7343
|
+
component: component_id
|
|
7344
|
+
});
|
|
7345
|
+
submissionOfflineIds.push(submission.offline_id);
|
|
7346
|
+
submissionsPayload.push({ offline_id: submission.offline_id, component_id });
|
|
7347
|
+
offlineSubmissions.push(submission);
|
|
7348
|
+
for (const [fieldIdentifier, fileArray] of Object.entries(files)) {
|
|
7349
|
+
for (const file of fileArray) {
|
|
7350
|
+
const sha1 = await hashFile(file);
|
|
7351
|
+
await this.client.files.addCache(file, sha1);
|
|
7352
|
+
const offlineAttachment = offline({
|
|
7353
|
+
file_name: file.name,
|
|
7354
|
+
file_sha1: sha1,
|
|
7355
|
+
file: URL.createObjectURL(file),
|
|
7356
|
+
submission: submission.offline_id,
|
|
7357
|
+
field_identifier: fieldIdentifier
|
|
7358
|
+
});
|
|
7359
|
+
offlineAttachments.push(offlineAttachment);
|
|
7360
|
+
attachmentsPayload.push({
|
|
7361
|
+
offline_id: offlineAttachment.offline_id,
|
|
7362
|
+
submission_id: submission.offline_id,
|
|
7363
|
+
sha1,
|
|
7364
|
+
name: file.name,
|
|
7365
|
+
field_identifier: fieldIdentifier
|
|
7366
|
+
});
|
|
7367
|
+
}
|
|
7368
|
+
}
|
|
7369
|
+
}
|
|
7370
|
+
const filesRecord = {};
|
|
7371
|
+
for (const file of Object.values(files).flat()) {
|
|
7372
|
+
const sha1 = await hashFile(file);
|
|
7373
|
+
filesRecord[sha1] = {
|
|
7374
|
+
sha1,
|
|
7375
|
+
extension: file.name.split(".").pop() || "",
|
|
7376
|
+
file_type: file.type,
|
|
7377
|
+
size: file.size
|
|
7378
|
+
};
|
|
7115
7379
|
}
|
|
7380
|
+
store.dispatch(addFormSubmissions(offlineSubmissions));
|
|
7381
|
+
store.dispatch(addFormSubmissionAttachments(offlineAttachments));
|
|
7382
|
+
const promise = this.enqueueRequest({
|
|
7383
|
+
description: "Bulk add form submissions",
|
|
7384
|
+
method: HttpMethod.POST,
|
|
7385
|
+
url: `/forms/revisions/${formRevision}/bulk-respond/`,
|
|
7386
|
+
payload: {
|
|
7387
|
+
form_data: values,
|
|
7388
|
+
submitted_at: submittedAt,
|
|
7389
|
+
submissions: submissionsPayload,
|
|
7390
|
+
attachments: attachmentsPayload,
|
|
7391
|
+
files: Object.values(filesRecord)
|
|
7392
|
+
},
|
|
7393
|
+
blockers: componentOfflineIds,
|
|
7394
|
+
blocks: submissionOfflineIds
|
|
7395
|
+
});
|
|
7396
|
+
promise.then(({ submissions, attachments, presigned_urls }) => {
|
|
7397
|
+
store.dispatch(updateFormSubmissions(submissions));
|
|
7398
|
+
store.dispatch(updateFormSubmissionAttachments(attachments));
|
|
7399
|
+
for (const [sha1, presigned_url] of Object.entries(presigned_urls)) {
|
|
7400
|
+
const file = filesRecord[sha1];
|
|
7401
|
+
if (!file)
|
|
7402
|
+
continue;
|
|
7403
|
+
void this.enqueueRequest({
|
|
7404
|
+
url: presigned_url.url,
|
|
7405
|
+
description: "Upload file",
|
|
7406
|
+
method: HttpMethod.POST,
|
|
7407
|
+
isExternalUrl: true,
|
|
7408
|
+
isAuthNeeded: false,
|
|
7409
|
+
attachmentHash: sha1,
|
|
7410
|
+
blockers: [`s3-${file.sha1}.${file.extension}`],
|
|
7411
|
+
blocks: [sha1],
|
|
7412
|
+
s3url: presigned_url
|
|
7413
|
+
});
|
|
7414
|
+
}
|
|
7415
|
+
}).catch(() => {
|
|
7416
|
+
store.dispatch(deleteFormSubmissions(submissionOfflineIds));
|
|
7417
|
+
store.dispatch(deleteFormSubmissionAttachments(offlineAttachments.map((x) => x.offline_id)));
|
|
7418
|
+
});
|
|
7419
|
+
return [offlineSubmissions, promise.then(({ submissions }) => submissions)];
|
|
7420
|
+
}
|
|
7421
|
+
update(submission) {
|
|
7422
|
+
const { store } = this.client;
|
|
7423
|
+
const { values, files } = separateFilesFromValues(submission.values);
|
|
7116
7424
|
const attachFilesPromises = this.getAttachFilesPromises(files, submission);
|
|
7117
|
-
const
|
|
7118
|
-
...
|
|
7119
|
-
|
|
7425
|
+
const offlineSubmission = {
|
|
7426
|
+
...submission,
|
|
7427
|
+
values
|
|
7120
7428
|
};
|
|
7121
|
-
store.
|
|
7429
|
+
const submissionToBeUpdated = store.getState().formSubmissionReducer.formSubmissions[submission.offline_id];
|
|
7430
|
+
store.dispatch(updateFormSubmission(offlineSubmission));
|
|
7122
7431
|
const promise = this.enqueueRequest({
|
|
7123
7432
|
description: "Patch form submission",
|
|
7124
7433
|
method: HttpMethod.PATCH,
|
|
7125
7434
|
url: `/forms/submissions/${submission.offline_id}/`,
|
|
7126
|
-
payload:
|
|
7127
|
-
blockers: [
|
|
7435
|
+
payload: offlineSubmission,
|
|
7436
|
+
blockers: [offlineSubmission.issue, offlineSubmission.component, offlineSubmission.component_stage].filter(
|
|
7128
7437
|
(x) => x !== void 0
|
|
7129
7438
|
),
|
|
7130
|
-
blocks: [
|
|
7439
|
+
blocks: [offlineSubmission.offline_id]
|
|
7440
|
+
});
|
|
7441
|
+
promise.then((createdSubmission) => {
|
|
7442
|
+
store.dispatch(setFormSubmission(createdSubmission));
|
|
7443
|
+
}).catch(() => {
|
|
7444
|
+
store.dispatch(setFormSubmission(submissionToBeUpdated));
|
|
7131
7445
|
});
|
|
7132
|
-
return Promise.all([promise, ...attachFilesPromises]).then(() => promise);
|
|
7446
|
+
return [offlineSubmission, Promise.all([promise, ...attachFilesPromises]).then(() => promise)];
|
|
7133
7447
|
}
|
|
7134
7448
|
async delete(submissionId) {
|
|
7135
7449
|
const { store } = this.client;
|
|
7136
7450
|
const state = store.getState();
|
|
7137
|
-
const submission = state.
|
|
7138
|
-
|
|
7451
|
+
const submission = state.formSubmissionReducer.formSubmissions[submissionId];
|
|
7452
|
+
const submissionAttachments = selectAttachmentsOfFormSubmission(submissionId)(state);
|
|
7453
|
+
store.dispatch(deleteFormSubmission(submissionId));
|
|
7139
7454
|
store.dispatch(addActiveProjectFormSubmissionsCount(-1));
|
|
7455
|
+
store.dispatch(deleteFormSubmissionAttachments(submissionAttachments.map((x) => x.offline_id)));
|
|
7140
7456
|
try {
|
|
7141
7457
|
return await this.enqueueRequest({
|
|
7142
7458
|
description: "Delete user form submissions",
|
|
@@ -7146,10 +7462,9 @@ var __publicField = (obj, key, value) => {
|
|
|
7146
7462
|
blocks: []
|
|
7147
7463
|
});
|
|
7148
7464
|
} catch (e) {
|
|
7149
|
-
|
|
7150
|
-
|
|
7151
|
-
|
|
7152
|
-
}
|
|
7465
|
+
store.dispatch(addActiveProjectFormSubmissionsCount(1));
|
|
7466
|
+
store.dispatch(addFormSubmission(submission));
|
|
7467
|
+
store.dispatch(addFormSubmissionAttachments(submissionAttachments));
|
|
7153
7468
|
throw e;
|
|
7154
7469
|
}
|
|
7155
7470
|
}
|
|
@@ -7163,7 +7478,7 @@ var __publicField = (obj, key, value) => {
|
|
|
7163
7478
|
blockers: [],
|
|
7164
7479
|
blocks: []
|
|
7165
7480
|
});
|
|
7166
|
-
store.dispatch(
|
|
7481
|
+
store.dispatch(setFormSubmissions(submissions));
|
|
7167
7482
|
const attachments = await this.enqueueRequest({
|
|
7168
7483
|
description: "Fetch form attachments",
|
|
7169
7484
|
method: HttpMethod.GET,
|
|
@@ -7171,7 +7486,7 @@ var __publicField = (obj, key, value) => {
|
|
|
7171
7486
|
blockers: [],
|
|
7172
7487
|
blocks: []
|
|
7173
7488
|
});
|
|
7174
|
-
store.dispatch(
|
|
7489
|
+
store.dispatch(setFormSubmissionAttachments(attachments));
|
|
7175
7490
|
}
|
|
7176
7491
|
}
|
|
7177
7492
|
class WorkspaceService extends BaseApiService {
|
|
@@ -7895,6 +8210,142 @@ var __publicField = (obj, key, value) => {
|
|
|
7895
8210
|
});
|
|
7896
8211
|
}
|
|
7897
8212
|
}
|
|
8213
|
+
class TeamService extends BaseApiService {
|
|
8214
|
+
add(teamPayload) {
|
|
8215
|
+
const { store } = this.client;
|
|
8216
|
+
const state = store.getState();
|
|
8217
|
+
const activeOrganizationId = state.organizationReducer.activeOrganizationId;
|
|
8218
|
+
if (!activeOrganizationId) {
|
|
8219
|
+
throw new Error(`Expected active organization to be set, got ${activeOrganizationId}`);
|
|
8220
|
+
}
|
|
8221
|
+
const offlineTeam = offline({
|
|
8222
|
+
...teamPayload,
|
|
8223
|
+
organization: activeOrganizationId,
|
|
8224
|
+
submitted_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
8225
|
+
// TODO: uncomment once supported
|
|
8226
|
+
// created_by: state.userReducer.currentUser.id,
|
|
8227
|
+
});
|
|
8228
|
+
store.dispatch(addTeam(offlineTeam));
|
|
8229
|
+
const promise = this.enqueueRequest({
|
|
8230
|
+
description: "Create team",
|
|
8231
|
+
method: HttpMethod.POST,
|
|
8232
|
+
url: `/organizations/${activeOrganizationId}/teams/`,
|
|
8233
|
+
payload: offlineTeam,
|
|
8234
|
+
// No blocks since users and organizations are not offline
|
|
8235
|
+
blockers: [],
|
|
8236
|
+
blocks: [offlineTeam.offline_id]
|
|
8237
|
+
});
|
|
8238
|
+
promise.then((createdTeam) => {
|
|
8239
|
+
store.dispatch(setTeam(createdTeam));
|
|
8240
|
+
}).catch(() => {
|
|
8241
|
+
store.dispatch(deleteTeam(offlineTeam.offline_id));
|
|
8242
|
+
});
|
|
8243
|
+
return [offlineTeam, promise];
|
|
8244
|
+
}
|
|
8245
|
+
// TODO: @Audiopolis / Magnus - should we pass a offline_id as one arg and a UpdatedTeamProps as a second arg instead of this set up?
|
|
8246
|
+
update(team) {
|
|
8247
|
+
const { store } = this.client;
|
|
8248
|
+
const teamToBeUpdated = store.getState().teamReducer.teams[team.offline_id];
|
|
8249
|
+
const offlineUpdatedTeam = {
|
|
8250
|
+
...teamToBeUpdated,
|
|
8251
|
+
...team
|
|
8252
|
+
};
|
|
8253
|
+
store.dispatch(updateTeam(offlineUpdatedTeam));
|
|
8254
|
+
const promise = this.enqueueRequest({
|
|
8255
|
+
description: "Update team",
|
|
8256
|
+
method: HttpMethod.PATCH,
|
|
8257
|
+
url: `/organizations/teams/${team.offline_id}/`,
|
|
8258
|
+
payload: offlineUpdatedTeam,
|
|
8259
|
+
blockers: [team.offline_id],
|
|
8260
|
+
blocks: [team.offline_id]
|
|
8261
|
+
});
|
|
8262
|
+
promise.then((updatedTeam) => {
|
|
8263
|
+
store.dispatch(setTeam(updatedTeam));
|
|
8264
|
+
}).catch(() => {
|
|
8265
|
+
store.dispatch(setTeam(teamToBeUpdated));
|
|
8266
|
+
});
|
|
8267
|
+
return [offlineUpdatedTeam, promise];
|
|
8268
|
+
}
|
|
8269
|
+
async delete(teamId) {
|
|
8270
|
+
const { store } = this.client;
|
|
8271
|
+
const state = store.getState();
|
|
8272
|
+
const team = state.teamReducer.teams[teamId];
|
|
8273
|
+
if (!team) {
|
|
8274
|
+
throw new Error(`Expected team with id ${teamId} to exist`);
|
|
8275
|
+
}
|
|
8276
|
+
store.dispatch(deleteTeam(teamId));
|
|
8277
|
+
try {
|
|
8278
|
+
return await this.enqueueRequest({
|
|
8279
|
+
description: "Delete team",
|
|
8280
|
+
method: HttpMethod.DELETE,
|
|
8281
|
+
url: `/organizations/teams/${teamId}/`,
|
|
8282
|
+
blockers: [teamId],
|
|
8283
|
+
blocks: [teamId]
|
|
8284
|
+
});
|
|
8285
|
+
} catch (e) {
|
|
8286
|
+
store.dispatch(setTeam(team));
|
|
8287
|
+
throw e;
|
|
8288
|
+
}
|
|
8289
|
+
}
|
|
8290
|
+
async setMembers(teamId, members) {
|
|
8291
|
+
const { store } = this.client;
|
|
8292
|
+
const team = store.getState().teamReducer.teams[teamId];
|
|
8293
|
+
if (!team) {
|
|
8294
|
+
throw new Error(`Expected team with id ${teamId} to exist`);
|
|
8295
|
+
}
|
|
8296
|
+
if (members.length !== new Set(members).size) {
|
|
8297
|
+
throw new Error("Duplicate members found in the list");
|
|
8298
|
+
}
|
|
8299
|
+
store.dispatch(updateTeam({ ...team, members }));
|
|
8300
|
+
const promise = this.enqueueRequest({
|
|
8301
|
+
description: "Set team members",
|
|
8302
|
+
method: HttpMethod.PUT,
|
|
8303
|
+
url: `/organizations/teams/${teamId}/set-members/`,
|
|
8304
|
+
payload: {
|
|
8305
|
+
users: members
|
|
8306
|
+
},
|
|
8307
|
+
blockers: [teamId],
|
|
8308
|
+
blocks: [teamId]
|
|
8309
|
+
});
|
|
8310
|
+
promise.catch(() => {
|
|
8311
|
+
store.dispatch(setTeam(team));
|
|
8312
|
+
});
|
|
8313
|
+
return promise;
|
|
8314
|
+
}
|
|
8315
|
+
async addMembers(teamId, members) {
|
|
8316
|
+
const { store } = this.client;
|
|
8317
|
+
const team = store.getState().teamReducer.teams[teamId];
|
|
8318
|
+
if (!team) {
|
|
8319
|
+
throw new Error(`Expected team with id ${teamId} to exist`);
|
|
8320
|
+
}
|
|
8321
|
+
const newMembers = [...team.members, ...members];
|
|
8322
|
+
return this.setMembers(teamId, newMembers);
|
|
8323
|
+
}
|
|
8324
|
+
async removeMembers(teamId, members) {
|
|
8325
|
+
const { store } = this.client;
|
|
8326
|
+
const team = store.getState().teamReducer.teams[teamId];
|
|
8327
|
+
if (!team) {
|
|
8328
|
+
throw new Error(`Expected team with id ${teamId} to exist`);
|
|
8329
|
+
}
|
|
8330
|
+
const newMembers = team.members.filter((member) => !members.includes(member));
|
|
8331
|
+
return this.setMembers(teamId, newMembers);
|
|
8332
|
+
}
|
|
8333
|
+
async refreshStore() {
|
|
8334
|
+
const { store } = this.client;
|
|
8335
|
+
const activeOrganizationId = store.getState().organizationReducer.activeOrganizationId;
|
|
8336
|
+
if (!activeOrganizationId) {
|
|
8337
|
+
throw new Error(`Expected active organization to be set, got ${activeOrganizationId}`);
|
|
8338
|
+
}
|
|
8339
|
+
const result = await this.enqueueRequest({
|
|
8340
|
+
description: "Fetch teams",
|
|
8341
|
+
method: HttpMethod.GET,
|
|
8342
|
+
url: `/organizations/${activeOrganizationId}/teams/`,
|
|
8343
|
+
blockers: [],
|
|
8344
|
+
blocks: []
|
|
8345
|
+
});
|
|
8346
|
+
store.dispatch(setTeams(result));
|
|
8347
|
+
}
|
|
8348
|
+
}
|
|
7898
8349
|
class OvermapSDK {
|
|
7899
8350
|
constructor(apiUrl, store) {
|
|
7900
8351
|
__publicField(this, "API_URL");
|
|
@@ -7924,6 +8375,7 @@ var __publicField = (obj, key, value) => {
|
|
|
7924
8375
|
__publicField(this, "emailDomains", new EmailDomainsService(this));
|
|
7925
8376
|
__publicField(this, "licenses", new LicenseService(this));
|
|
7926
8377
|
__publicField(this, "documents", new DocumentService(this));
|
|
8378
|
+
__publicField(this, "teams", new TeamService(this));
|
|
7927
8379
|
this.API_URL = apiUrl;
|
|
7928
8380
|
this.store = store;
|
|
7929
8381
|
}
|
|
@@ -7965,7 +8417,7 @@ var __publicField = (obj, key, value) => {
|
|
|
7965
8417
|
const patchfieldBorder = "_patchfieldBorder_1w0fq_73";
|
|
7966
8418
|
const title = "_title_1w0fq_73";
|
|
7967
8419
|
const error = "_error_1w0fq_89";
|
|
7968
|
-
const styles$
|
|
8420
|
+
const styles$d = {
|
|
7969
8421
|
description: description$2,
|
|
7970
8422
|
floatingButtonContainer: floatingButtonContainer$2,
|
|
7971
8423
|
FullScreenImageContainer: FullScreenImageContainer$2,
|
|
@@ -8086,7 +8538,7 @@ var __publicField = (obj, key, value) => {
|
|
|
8086
8538
|
const longIconButton$1 = "_longIconButton_10o76_36";
|
|
8087
8539
|
const previewImage$1 = "_previewImage_10o76_42";
|
|
8088
8540
|
const FullScreenImage$1 = "_FullScreenImage_10o76_12";
|
|
8089
|
-
const styles$
|
|
8541
|
+
const styles$c = {
|
|
8090
8542
|
description: description$1,
|
|
8091
8543
|
floatingButtonContainer: floatingButtonContainer$1,
|
|
8092
8544
|
FullScreenImageContainer: FullScreenImageContainer$1,
|
|
@@ -8110,7 +8562,7 @@ var __publicField = (obj, key, value) => {
|
|
|
8110
8562
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8111
8563
|
"button",
|
|
8112
8564
|
{
|
|
8113
|
-
className: styles$
|
|
8565
|
+
className: styles$c.FullScreenImageContainer,
|
|
8114
8566
|
type: "button",
|
|
8115
8567
|
onClick: () => {
|
|
8116
8568
|
setShowPreview(false);
|
|
@@ -8118,7 +8570,7 @@ var __publicField = (obj, key, value) => {
|
|
|
8118
8570
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8119
8571
|
"img",
|
|
8120
8572
|
{
|
|
8121
|
-
className: styles$
|
|
8573
|
+
className: styles$c.FullScreenImage,
|
|
8122
8574
|
src: url,
|
|
8123
8575
|
alt: name,
|
|
8124
8576
|
onClick: (e) => {
|
|
@@ -8128,11 +8580,11 @@ var __publicField = (obj, key, value) => {
|
|
|
8128
8580
|
)
|
|
8129
8581
|
}
|
|
8130
8582
|
),
|
|
8131
|
-
/* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { className: styles$
|
|
8583
|
+
/* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { className: styles$c.TopBarContainer, align: "center", children: [
|
|
8132
8584
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8133
8585
|
blocks.IconButton,
|
|
8134
8586
|
{
|
|
8135
|
-
className: styles$
|
|
8587
|
+
className: styles$c.longIconButton,
|
|
8136
8588
|
variant: "soft",
|
|
8137
8589
|
"aria-label": "Exit preview",
|
|
8138
8590
|
onClick: () => {
|
|
@@ -8141,11 +8593,11 @@ var __publicField = (obj, key, value) => {
|
|
|
8141
8593
|
children: /* @__PURE__ */ jsxRuntime.jsx(blocks.RiIcon, { icon: "RiArrowLeftLine" })
|
|
8142
8594
|
}
|
|
8143
8595
|
),
|
|
8144
|
-
/* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { className: styles$
|
|
8596
|
+
/* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { className: styles$c.fileName, children: name }),
|
|
8145
8597
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8146
8598
|
blocks.IconButton,
|
|
8147
8599
|
{
|
|
8148
|
-
className: styles$
|
|
8600
|
+
className: styles$c.longIconButton,
|
|
8149
8601
|
variant: "soft",
|
|
8150
8602
|
"aria-label": `Download ${name}`,
|
|
8151
8603
|
onClick: handleDownload,
|
|
@@ -8173,7 +8625,7 @@ var __publicField = (obj, key, value) => {
|
|
|
8173
8625
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8174
8626
|
"img",
|
|
8175
8627
|
{
|
|
8176
|
-
className: styles$
|
|
8628
|
+
className: styles$c.previewImage,
|
|
8177
8629
|
src: resolvedImageURL,
|
|
8178
8630
|
alt: resolvedImage.name,
|
|
8179
8631
|
onClick: () => {
|
|
@@ -8201,7 +8653,7 @@ var __publicField = (obj, key, value) => {
|
|
|
8201
8653
|
const { helpText, children, severity } = props;
|
|
8202
8654
|
return /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { direction: "column", gap: "1", children: [
|
|
8203
8655
|
children,
|
|
8204
|
-
/* @__PURE__ */ jsxRuntime.jsx(blocks.Flex, { direction: "column", children: /* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { size: "1", severity, className: styles$
|
|
8656
|
+
/* @__PURE__ */ jsxRuntime.jsx(blocks.Flex, { direction: "column", children: /* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { size: "1", severity, className: styles$c.description, children: helpText }) })
|
|
8205
8657
|
] });
|
|
8206
8658
|
};
|
|
8207
8659
|
const InputWithLabelAndHelpText = (props) => {
|
|
@@ -8435,6 +8887,9 @@ var __publicField = (obj, key, value) => {
|
|
|
8435
8887
|
function RiCalendarLine(props) {
|
|
8436
8888
|
return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "d": "M9 1V3H15V1H17V3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H7V1H9ZM20 11H4V19H20V11ZM7 5H4V9H20V5H17V7H15V5H9V7H7V5Z" }, "child": [] }] })(props);
|
|
8437
8889
|
}
|
|
8890
|
+
function RiQrCodeLine(props) {
|
|
8891
|
+
return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "d": "M16 17V16H13V13H16V15H18V17H17V19H15V21H13V18H15V17H16ZM21 21H17V19H19V17H21V21ZM3 3H11V11H3V3ZM5 5V9H9V5H5ZM13 3H21V11H13V3ZM15 5V9H19V5H15ZM3 13H11V21H3V13ZM5 15V19H9V15H5ZM18 13H21V15H18V13ZM6 6H8V8H6V6ZM6 16H8V18H6V16ZM16 6H18V8H16V6Z" }, "child": [] }] })(props);
|
|
8892
|
+
}
|
|
8438
8893
|
function RiFileCopyLine(props) {
|
|
8439
8894
|
return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "d": "M6.9998 6V3C6.9998 2.44772 7.44752 2 7.9998 2H19.9998C20.5521 2 20.9998 2.44772 20.9998 3V17C20.9998 17.5523 20.5521 18 19.9998 18H16.9998V20.9991C16.9998 21.5519 16.5499 22 15.993 22H4.00666C3.45059 22 3 21.5554 3 20.9991L3.0026 7.00087C3.0027 6.44811 3.45264 6 4.00942 6H6.9998ZM5.00242 8L5.00019 20H14.9998V8H5.00242ZM8.9998 6H16.9998V16H18.9998V4H8.9998V6Z" }, "child": [] }] })(props);
|
|
8440
8895
|
}
|
|
@@ -9338,9 +9793,9 @@ var __publicField = (obj, key, value) => {
|
|
|
9338
9793
|
return React__namespace.createElement("div", { ...insetProps, ref: forwardedRef, className: classNames("rt-Inset", className, withBreakpoints(side, "rt-r-side"), withBreakpoints(clip, "rt-r-clip"), withBreakpoints(p, "rt-r-p"), withBreakpoints(px, "rt-r-px"), withBreakpoints(py, "rt-r-py"), withBreakpoints(pt, "rt-r-pt"), withBreakpoints(pr, "rt-r-pr"), withBreakpoints(pb, "rt-r-pb"), withBreakpoints(pl, "rt-r-pl"), withMarginProps(marginProps)) });
|
|
9339
9794
|
});
|
|
9340
9795
|
Inset.displayName = "Inset";
|
|
9341
|
-
const sizes$
|
|
9796
|
+
const sizes$8 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
9342
9797
|
const headingPropDefs = {
|
|
9343
|
-
size: { type: "enum", values: sizes$
|
|
9798
|
+
size: { type: "enum", values: sizes$8, default: "6", responsive: true },
|
|
9344
9799
|
weight: { ...weightProp, default: "bold" },
|
|
9345
9800
|
align: alignProp,
|
|
9346
9801
|
trim: trimProp,
|
|
@@ -9353,9 +9808,9 @@ var __publicField = (obj, key, value) => {
|
|
|
9353
9808
|
return React__namespace.createElement($5e63c961fc1ce211$export$8c6ed5c666ac1360, { "data-accent-color": color, ...headingProps, ref: forwardedRef, className: classNames("rt-Heading", className, withBreakpoints(size, "rt-r-size"), withBreakpoints(weight, "rt-r-weight"), withBreakpoints(align, "rt-r-ta"), withBreakpoints(trim, "rt-r-lt"), { "rt-high-contrast": highContrast }, withMarginProps(marginProps)) }, asChild ? children : React__namespace.createElement(Tag, null, children));
|
|
9354
9809
|
});
|
|
9355
9810
|
Heading.displayName = "Heading";
|
|
9356
|
-
const sizes$
|
|
9811
|
+
const sizes$7 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
9357
9812
|
const textPropDefs = {
|
|
9358
|
-
size: { type: "enum", values: sizes$
|
|
9813
|
+
size: { type: "enum", values: sizes$7, default: void 0, responsive: true },
|
|
9359
9814
|
weight: weightProp,
|
|
9360
9815
|
align: alignProp,
|
|
9361
9816
|
trim: trimProp,
|
|
@@ -9368,6 +9823,21 @@ var __publicField = (obj, key, value) => {
|
|
|
9368
9823
|
return React__namespace.createElement($5e63c961fc1ce211$export$8c6ed5c666ac1360, { "data-accent-color": color, ...textProps, ref: forwardedRef, className: classNames("rt-Text", className, withBreakpoints(size, "rt-r-size"), withBreakpoints(weight, "rt-r-weight"), withBreakpoints(align, "rt-r-ta"), withBreakpoints(trim, "rt-r-lt"), { "rt-high-contrast": highContrast }, withMarginProps(marginProps)) }, asChild ? children : React__namespace.createElement(Tag, null, children));
|
|
9369
9824
|
});
|
|
9370
9825
|
Text.displayName = "Text";
|
|
9826
|
+
const sizes$6 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
9827
|
+
const variants$4 = ["solid", "soft", "outline", "ghost"];
|
|
9828
|
+
const codePropDefs = {
|
|
9829
|
+
size: { type: "enum", values: sizes$6, default: void 0, responsive: true },
|
|
9830
|
+
variant: { type: "enum", values: variants$4, default: "soft" },
|
|
9831
|
+
weight: weightProp,
|
|
9832
|
+
color: colorProp,
|
|
9833
|
+
highContrast: highContrastProp
|
|
9834
|
+
};
|
|
9835
|
+
const Code = React__namespace.forwardRef((props, forwardedRef) => {
|
|
9836
|
+
const { rest: marginRest, ...marginProps } = extractMarginProps(props);
|
|
9837
|
+
const { className, size = codePropDefs.size.default, variant = codePropDefs.variant.default, weight = codePropDefs.weight.default, color = codePropDefs.color.default, highContrast = codePropDefs.highContrast.default, ...codeProps } = marginRest;
|
|
9838
|
+
return React__namespace.createElement("code", { "data-accent-color": color, ...codeProps, ref: forwardedRef, className: classNames("rt-Code", className, withBreakpoints(size, "rt-r-size"), `rt-variant-${variant}`, withBreakpoints(weight, "rt-r-weight"), { "rt-high-contrast": highContrast }, withMarginProps(marginProps)) });
|
|
9839
|
+
});
|
|
9840
|
+
Code.displayName = "Code";
|
|
9371
9841
|
const Em = React__namespace.forwardRef((props, forwardedRef) => React__namespace.createElement("em", { ...props, ref: forwardedRef, className: classNames("rt-Em", props.className) }));
|
|
9372
9842
|
Em.displayName = "Em";
|
|
9373
9843
|
const Strong = React__namespace.forwardRef((props, forwardedRef) => React__namespace.createElement("strong", { ...props, ref: forwardedRef, className: classNames("rt-Strong", props.className) }));
|
|
@@ -11758,7 +12228,7 @@ var __publicField = (obj, key, value) => {
|
|
|
11758
12228
|
});
|
|
11759
12229
|
const clickableLinkContainer = "_clickableLinkContainer_1ace7_1";
|
|
11760
12230
|
const TextFieldInputCopy = "_TextFieldInputCopy_1ace7_5";
|
|
11761
|
-
const styles$
|
|
12231
|
+
const styles$b = {
|
|
11762
12232
|
clickableLinkContainer,
|
|
11763
12233
|
TextFieldInputCopy
|
|
11764
12234
|
};
|
|
@@ -11787,13 +12257,13 @@ var __publicField = (obj, key, value) => {
|
|
|
11787
12257
|
placeholder: field.placeholder,
|
|
11788
12258
|
color
|
|
11789
12259
|
}
|
|
11790
|
-
) : /* @__PURE__ */ jsxRuntime.jsxs(TextField$1.Root, { className: styles$
|
|
12260
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs(TextField$1.Root, { className: styles$b.clickableLinkContainer, children: [
|
|
11791
12261
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11792
12262
|
"div",
|
|
11793
12263
|
{
|
|
11794
12264
|
className: classNames$1(
|
|
11795
12265
|
"rt-TextFieldInput rt-r-size-2 rt-variant-surface",
|
|
11796
|
-
styles$
|
|
12266
|
+
styles$b.TextFieldInputCopy
|
|
11797
12267
|
),
|
|
11798
12268
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11799
12269
|
Linkify,
|
|
@@ -12365,8 +12835,7 @@ var __publicField = (obj, key, value) => {
|
|
|
12365
12835
|
description: "List possible options for the user to select from.",
|
|
12366
12836
|
required: true,
|
|
12367
12837
|
identifier: `${path}options`,
|
|
12368
|
-
minimum_length: 2
|
|
12369
|
-
maximum_length: 20
|
|
12838
|
+
minimum_length: 2
|
|
12370
12839
|
}),
|
|
12371
12840
|
showDirectly: true
|
|
12372
12841
|
}
|
|
@@ -12485,6 +12954,158 @@ var __publicField = (obj, key, value) => {
|
|
|
12485
12954
|
__publicField(_MultiSelectField, "fieldTypeDescription", "Allows the user to select a multiple options from a list of options.");
|
|
12486
12955
|
__publicField(_MultiSelectField, "Icon", RiCheckboxLine);
|
|
12487
12956
|
let MultiSelectField = _MultiSelectField;
|
|
12957
|
+
const QrScannerWrapper = "_QrScannerWrapper_1puz3_1";
|
|
12958
|
+
const styles$a = {
|
|
12959
|
+
QrScannerWrapper
|
|
12960
|
+
};
|
|
12961
|
+
const QrInput = React.memo((props) => {
|
|
12962
|
+
const [{ inputId, labelId, label, helpText, size, severity, showInputOnly, field, fieldProps }, rest] = useFormikInput(props);
|
|
12963
|
+
const [showQrScanner, setShowQrScanner] = React.useState(false);
|
|
12964
|
+
const value = fieldProps.value;
|
|
12965
|
+
const handleQrScan = React.useCallback(
|
|
12966
|
+
(data) => {
|
|
12967
|
+
fieldProps.onChange({ target: { value: data } });
|
|
12968
|
+
setShowQrScanner(false);
|
|
12969
|
+
},
|
|
12970
|
+
[fieldProps]
|
|
12971
|
+
);
|
|
12972
|
+
const handleClearScanResult = React.useCallback(() => {
|
|
12973
|
+
fieldProps.onChange({ target: { value: "" } });
|
|
12974
|
+
}, [fieldProps]);
|
|
12975
|
+
const handleScanButtonClicked = React.useCallback(() => {
|
|
12976
|
+
setShowQrScanner(true);
|
|
12977
|
+
}, []);
|
|
12978
|
+
const handleQrScannerClose = React.useCallback(() => {
|
|
12979
|
+
setShowQrScanner(false);
|
|
12980
|
+
}, []);
|
|
12981
|
+
return /* @__PURE__ */ jsxRuntime.jsx(InputWithLabelAndHelpText, { helpText, severity, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12982
|
+
InputWithLabel,
|
|
12983
|
+
{
|
|
12984
|
+
size,
|
|
12985
|
+
severity,
|
|
12986
|
+
inputId,
|
|
12987
|
+
labelId,
|
|
12988
|
+
label: showInputOnly ? label : "",
|
|
12989
|
+
image: showInputOnly ? void 0 : field.image,
|
|
12990
|
+
flexProps: { direction: "column", justify: "start", align: "start", gap: "1" },
|
|
12991
|
+
children: [
|
|
12992
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12993
|
+
blocks.Overlay,
|
|
12994
|
+
{
|
|
12995
|
+
open: showQrScanner,
|
|
12996
|
+
content: () => /* @__PURE__ */ jsxRuntime.jsx(QrScanner, { onQrScan: handleQrScan, onClose: handleQrScannerClose }),
|
|
12997
|
+
onOpenChange: setShowQrScanner
|
|
12998
|
+
}
|
|
12999
|
+
),
|
|
13000
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Flex, { width: "max-content", gap: "1", align: "center", children: [
|
|
13001
|
+
/* @__PURE__ */ jsxRuntime.jsxs(blocks.Button, { ...rest, variant: "soft", onClick: handleScanButtonClicked, children: [
|
|
13002
|
+
/* @__PURE__ */ jsxRuntime.jsx(blocks.RiIcon, { icon: "RiQrCodeLine" }),
|
|
13003
|
+
"Scan"
|
|
13004
|
+
] }),
|
|
13005
|
+
value && /* @__PURE__ */ jsxRuntime.jsx(Text, { color: "jade", size: "1", children: /* @__PURE__ */ jsxRuntime.jsx(blocks.RiIcon, { icon: "RiCheckLine", style: { verticalAlign: "bottom" } }) })
|
|
13006
|
+
] }),
|
|
13007
|
+
value && /* @__PURE__ */ jsxRuntime.jsx(Card, { children: /* @__PURE__ */ jsxRuntime.jsxs(Flex, { width: "max-content", gap: "2", align: "center", children: [
|
|
13008
|
+
/* @__PURE__ */ jsxRuntime.jsx(Code, { color: "gray", highContrast: true, children: value }),
|
|
13009
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13010
|
+
blocks.IconButton,
|
|
13011
|
+
{
|
|
13012
|
+
severity: "info",
|
|
13013
|
+
variant: "ghost",
|
|
13014
|
+
"aria-label": "delete",
|
|
13015
|
+
size: "small",
|
|
13016
|
+
onClick: handleClearScanResult,
|
|
13017
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(blocks.RiIcon, { icon: "RiCloseLine" })
|
|
13018
|
+
}
|
|
13019
|
+
)
|
|
13020
|
+
] }) })
|
|
13021
|
+
]
|
|
13022
|
+
}
|
|
13023
|
+
) });
|
|
13024
|
+
});
|
|
13025
|
+
QrInput.displayName = "QrInput";
|
|
13026
|
+
const QrScanner = React.memo((props) => {
|
|
13027
|
+
const { onQrScan, onClose } = props;
|
|
13028
|
+
const videoRef = React.useRef(null);
|
|
13029
|
+
const [isScannerLoading, setIsScannerLoading] = React.useState(false);
|
|
13030
|
+
React.useEffect(() => {
|
|
13031
|
+
if (!videoRef.current)
|
|
13032
|
+
return;
|
|
13033
|
+
const qrScanner = new QrScannerAPI(
|
|
13034
|
+
videoRef.current,
|
|
13035
|
+
(result) => {
|
|
13036
|
+
const data = result.data;
|
|
13037
|
+
onQrScan(data);
|
|
13038
|
+
qrScanner.destroy();
|
|
13039
|
+
},
|
|
13040
|
+
{
|
|
13041
|
+
highlightCodeOutline: true,
|
|
13042
|
+
highlightScanRegion: true,
|
|
13043
|
+
maxScansPerSecond: 1
|
|
13044
|
+
}
|
|
13045
|
+
);
|
|
13046
|
+
setIsScannerLoading(true);
|
|
13047
|
+
qrScanner.start().then(() => {
|
|
13048
|
+
setIsScannerLoading(false);
|
|
13049
|
+
}).catch(() => {
|
|
13050
|
+
setIsScannerLoading(false);
|
|
13051
|
+
});
|
|
13052
|
+
}, [onQrScan]);
|
|
13053
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13054
|
+
Flex,
|
|
13055
|
+
{
|
|
13056
|
+
className: styles$a.QrScannerWrapper,
|
|
13057
|
+
width: "100%",
|
|
13058
|
+
height: "100%",
|
|
13059
|
+
direction: "column",
|
|
13060
|
+
gap: "2",
|
|
13061
|
+
justify: "center",
|
|
13062
|
+
position: "relative",
|
|
13063
|
+
children: [
|
|
13064
|
+
/* @__PURE__ */ jsxRuntime.jsx(Flex, { width: "100%", position: "absolute", top: "0", p: "2", children: /* @__PURE__ */ jsxRuntime.jsx(blocks.IconButton, { "aria-label": "close", variant: "soft", severity: "info", highContrast: true, onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsx(blocks.RiIcon, { icon: "RiCloseLine" }) }) }),
|
|
13065
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box, { style: { maxWidth: "100%", maxHeight: "100%" }, position: "relative", children: [
|
|
13066
|
+
/* @__PURE__ */ jsxRuntime.jsx("video", { ref: videoRef, style: { width: "100%", height: "100%" } }),
|
|
13067
|
+
isScannerLoading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
13068
|
+
Flex,
|
|
13069
|
+
{
|
|
13070
|
+
position: "absolute",
|
|
13071
|
+
inset: "0",
|
|
13072
|
+
style: { background: "var(--color-background)" },
|
|
13073
|
+
justify: "center",
|
|
13074
|
+
align: "center",
|
|
13075
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(blocks.Spinner, {})
|
|
13076
|
+
}
|
|
13077
|
+
)
|
|
13078
|
+
] })
|
|
13079
|
+
]
|
|
13080
|
+
}
|
|
13081
|
+
);
|
|
13082
|
+
});
|
|
13083
|
+
QrScanner.displayName = "QrScanner";
|
|
13084
|
+
const emptyQrField = {
|
|
13085
|
+
...emptyBaseField,
|
|
13086
|
+
type: "qr"
|
|
13087
|
+
};
|
|
13088
|
+
const _QrField = class _QrField extends BaseField {
|
|
13089
|
+
constructor(options) {
|
|
13090
|
+
super({ ...options, type: "qr" });
|
|
13091
|
+
__publicField(this, "onlyValidateAfterTouched", false);
|
|
13092
|
+
}
|
|
13093
|
+
serialize() {
|
|
13094
|
+
return super._serialize();
|
|
13095
|
+
}
|
|
13096
|
+
static deserialize(data) {
|
|
13097
|
+
if (data.type !== "qr")
|
|
13098
|
+
throw new Error("Type mismatch.");
|
|
13099
|
+
return new _QrField(data);
|
|
13100
|
+
}
|
|
13101
|
+
getInput(props) {
|
|
13102
|
+
return /* @__PURE__ */ jsxRuntime.jsx(QrInput, { ...props, field: this });
|
|
13103
|
+
}
|
|
13104
|
+
};
|
|
13105
|
+
__publicField(_QrField, "fieldTypeName", "QR");
|
|
13106
|
+
__publicField(_QrField, "fieldTypeDescription", "Used for scanning/reading QR codes.");
|
|
13107
|
+
__publicField(_QrField, "Icon", RiQrCodeLine);
|
|
13108
|
+
let QrField = _QrField;
|
|
12488
13109
|
const FieldInputCloner = React.memo((props) => {
|
|
12489
13110
|
const { field, ...rest } = props;
|
|
12490
13111
|
const [{ value: identifier }] = formik.useField(field.options.clonedFieldIdentifier);
|
|
@@ -13742,6 +14363,7 @@ var __publicField = (obj, key, value) => {
|
|
|
13742
14363
|
text: TextField,
|
|
13743
14364
|
custom: CustomField,
|
|
13744
14365
|
upload: UploadField,
|
|
14366
|
+
qr: QrField,
|
|
13745
14367
|
// TODO: Underscore
|
|
13746
14368
|
"multi-string": MultiStringField,
|
|
13747
14369
|
"multi-select": MultiSelectField
|
|
@@ -13755,6 +14377,7 @@ var __publicField = (obj, key, value) => {
|
|
|
13755
14377
|
text: emptyTextField,
|
|
13756
14378
|
custom: emptyCustomField,
|
|
13757
14379
|
upload: emptyUploadField,
|
|
14380
|
+
qr: emptyQrField,
|
|
13758
14381
|
// TODO: Underscore
|
|
13759
14382
|
"multi-string": emptyMultiStringField,
|
|
13760
14383
|
"multi-select": emptyMultiSelectField
|
|
@@ -13842,7 +14465,7 @@ var __publicField = (obj, key, value) => {
|
|
|
13842
14465
|
return /* @__PURE__ */ jsxRuntime.jsx(Card, { children: /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { direction: "column", gap: "3", children: [
|
|
13843
14466
|
/* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { direction: "column", children: [
|
|
13844
14467
|
/* @__PURE__ */ jsxRuntime.jsx(Heading, { as: "h3", size: "3", children: label }),
|
|
13845
|
-
/* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { className: styles$
|
|
14468
|
+
/* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { className: styles$c.description, children: description2 })
|
|
13846
14469
|
] }),
|
|
13847
14470
|
inputs
|
|
13848
14471
|
] }) });
|
|
@@ -14029,7 +14652,7 @@ var __publicField = (obj, key, value) => {
|
|
|
14029
14652
|
};
|
|
14030
14653
|
const useAttachImagesToFormRevisionFields = (revision) => {
|
|
14031
14654
|
const { sdk } = useSDK();
|
|
14032
|
-
const attachments = useAppSelector(
|
|
14655
|
+
const attachments = useAppSelector(selectAttachmentsOfFormRevision((revision == null ? void 0 : revision.offline_id) ?? ""));
|
|
14033
14656
|
return React.useMemo(() => {
|
|
14034
14657
|
if (!revision || !attachments)
|
|
14035
14658
|
return revision;
|
|
@@ -14085,7 +14708,7 @@ var __publicField = (obj, key, value) => {
|
|
|
14085
14708
|
[schema.title]
|
|
14086
14709
|
);
|
|
14087
14710
|
const Description = React.useMemo(
|
|
14088
|
-
() => typeof schema.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { className: styles$
|
|
14711
|
+
() => typeof schema.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { className: styles$c.description, children: schema.description }) : schema.description,
|
|
14089
14712
|
[schema.description]
|
|
14090
14713
|
);
|
|
14091
14714
|
const inputs = useFieldInputs(schema.fields, { formId: formId2, disabled: readonly });
|
|
@@ -14101,7 +14724,7 @@ var __publicField = (obj, key, value) => {
|
|
|
14101
14724
|
!hideDescription && Description
|
|
14102
14725
|
] }) }),
|
|
14103
14726
|
inputs,
|
|
14104
|
-
!readonly && /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { className: styles$
|
|
14727
|
+
!readonly && /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { className: styles$c.floatingButtonContainer, align: "center", justify: "end", gap: "2", children: [
|
|
14105
14728
|
cancelText && /* @__PURE__ */ jsxRuntime.jsx(blocks.Button, { severity: "info", ...buttonProps, type: "button", onClick: onCancel, children: cancelText }),
|
|
14106
14729
|
/* @__PURE__ */ jsxRuntime.jsx(blocks.Button, { ...buttonProps, type: "submit", disabled: !formik$1.isValid, children: submitText })
|
|
14107
14730
|
] })
|
|
@@ -14126,7 +14749,7 @@ var __publicField = (obj, key, value) => {
|
|
|
14126
14749
|
return formRevisionToSchema(revisionWithImages, { readonly: true });
|
|
14127
14750
|
}, [revisionWithImages]);
|
|
14128
14751
|
const submissionValuesWithAttachments = React.useMemo(() => {
|
|
14129
|
-
const attachments =
|
|
14752
|
+
const attachments = selectAttachmentsOfFormSubmission(submission.offline_id)(sdk.store.getState()) ?? [];
|
|
14130
14753
|
const downloadedAttachments = {};
|
|
14131
14754
|
for (const attachment of attachments) {
|
|
14132
14755
|
const promise = sdk.files.fetchFileFromUrl(attachment.file, attachment.file_sha1, attachment.file_name);
|
|
@@ -14176,8 +14799,8 @@ var __publicField = (obj, key, value) => {
|
|
|
14176
14799
|
}
|
|
14177
14800
|
return ret;
|
|
14178
14801
|
}, [filter, maxResults, ownerFilter]);
|
|
14179
|
-
const userForms = useAppSelector(
|
|
14180
|
-
const userFormMapping = useAppSelector(
|
|
14802
|
+
const userForms = useAppSelector(selectFilteredForms(ownerFilterOptions)) ?? [];
|
|
14803
|
+
const userFormMapping = useAppSelector(selectFormMapping);
|
|
14181
14804
|
const attachableUserForms = userForms.filter((form) => !form.component_type);
|
|
14182
14805
|
const attachableUserFormMapping = Object.values(userFormMapping).filter(
|
|
14183
14806
|
(form) => !form.component_type
|
|
@@ -14210,7 +14833,7 @@ var __publicField = (obj, key, value) => {
|
|
|
14210
14833
|
const handleChange = React.useCallback((e) => {
|
|
14211
14834
|
setFilter(e.currentTarget.value);
|
|
14212
14835
|
}, []);
|
|
14213
|
-
const numberOfForms = useAppSelector(
|
|
14836
|
+
const numberOfForms = useAppSelector(selectGeneralFormCount) || 0;
|
|
14214
14837
|
const numberOfHiddenForms = numberOfForms - attachableUserForms.length;
|
|
14215
14838
|
const overflowMessage = attachableUserForms.length == maxResults && numberOfHiddenForms > 0 ? `Only the first ${maxResults} results are shown (${numberOfHiddenForms} hidden)` : numberOfHiddenForms > 0 && `${numberOfHiddenForms} hidden forms`;
|
|
14216
14839
|
return /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { ref, direction: "column", gap: "2", children: [
|
|
@@ -14304,16 +14927,13 @@ var __publicField = (obj, key, value) => {
|
|
|
14304
14927
|
const { submission, onSubmissionClick, compact, labelType, rowDecorator } = props;
|
|
14305
14928
|
const currentUser = useAppSelector(selectCurrentUser);
|
|
14306
14929
|
const createdBy = useAppSelector(selectUser("created_by" in submission ? submission.created_by : currentUser.id));
|
|
14307
|
-
const dateToUse =
|
|
14308
|
-
const formattedDateTime =
|
|
14309
|
-
hour: "2-digit",
|
|
14310
|
-
minute: "2-digit"
|
|
14311
|
-
}) : getLocalDateString(dateToUse);
|
|
14930
|
+
const dateToUse = submission.submitted_at;
|
|
14931
|
+
const formattedDateTime = getLocalDateString(dateToUse);
|
|
14312
14932
|
const revision = useAppSelector(selectFormRevision(submission.form_revision));
|
|
14313
14933
|
if (!revision) {
|
|
14314
14934
|
throw new Error(`Could not find revision ${submission.form_revision} for submission ${submission.offline_id}.`);
|
|
14315
14935
|
}
|
|
14316
|
-
const latestRevisionNumber = (_a2 = useAppSelector(
|
|
14936
|
+
const latestRevisionNumber = (_a2 = useAppSelector(selectLatestFormRevisionOfForm(revision.form))) == null ? void 0 : _a2.revision;
|
|
14317
14937
|
const creatorProfileSrc = useFileSrc({
|
|
14318
14938
|
file: (createdBy == null ? void 0 : createdBy.profile.file) ?? null,
|
|
14319
14939
|
fileSha1: (createdBy == null ? void 0 : createdBy.profile.file_sha1) ?? null
|
|
@@ -14344,10 +14964,6 @@ var __publicField = (obj, key, value) => {
|
|
|
14344
14964
|
return row;
|
|
14345
14965
|
});
|
|
14346
14966
|
FormSubmissionBrowserEntry.displayName = "FormSubmissionBrowserEntry";
|
|
14347
|
-
const getCreatedAtOrSubmittedAtDate = (submission) => {
|
|
14348
|
-
const date = "created_at" in submission ? submission.created_at : submission.submitted_at;
|
|
14349
|
-
return new Date(date);
|
|
14350
|
-
};
|
|
14351
14967
|
const FormSubmissionBrowser = React.memo((props) => {
|
|
14352
14968
|
const {
|
|
14353
14969
|
formId: formId2,
|
|
@@ -14361,10 +14977,10 @@ var __publicField = (obj, key, value) => {
|
|
|
14361
14977
|
if (!!formId2 === !!propSubmissions) {
|
|
14362
14978
|
throw new Error("Either formId or submissions must be provided, but not both.");
|
|
14363
14979
|
}
|
|
14364
|
-
const submissions = useAppSelector(propSubmissions ? () => propSubmissions :
|
|
14980
|
+
const submissions = useAppSelector(propSubmissions ? () => propSubmissions : selectFormSubmissionsOfForm(formId2));
|
|
14365
14981
|
const sortedSubmissions = React.useMemo(
|
|
14366
14982
|
() => submissions == null ? void 0 : submissions.sort((a, b) => {
|
|
14367
|
-
return
|
|
14983
|
+
return a.submitted_at.localeCompare(b.submitted_at);
|
|
14368
14984
|
}),
|
|
14369
14985
|
[submissions]
|
|
14370
14986
|
);
|
|
@@ -15456,12 +16072,12 @@ var __publicField = (obj, key, value) => {
|
|
|
15456
16072
|
});
|
|
15457
16073
|
const previewSchema = React.useMemo(() => formRevisionToSchema(formik$1.values), [formik$1.values]);
|
|
15458
16074
|
return /* @__PURE__ */ jsxRuntime.jsx(Tabs.Root, { ref, defaultValue: "edit", children: /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { direction: "column", gap: "2", children: [
|
|
15459
|
-
showTabs && /* @__PURE__ */ jsxRuntime.jsxs(Tabs.List, { className: classNames$1(styles$
|
|
15460
|
-
/* @__PURE__ */ jsxRuntime.jsx(Tabs.Trigger, { className: styles$
|
|
16075
|
+
showTabs && /* @__PURE__ */ jsxRuntime.jsxs(Tabs.List, { className: classNames$1(styles$d.tabsList, tabsListClassName), children: [
|
|
16076
|
+
/* @__PURE__ */ jsxRuntime.jsx(Tabs.Trigger, { className: styles$d.tabTrigger, value: "edit", children: /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { align: "center", gap: "2", children: [
|
|
15461
16077
|
/* @__PURE__ */ jsxRuntime.jsx(blocks.RiIcon, { icon: "RiPencilLine" }),
|
|
15462
16078
|
"Edit"
|
|
15463
16079
|
] }) }),
|
|
15464
|
-
/* @__PURE__ */ jsxRuntime.jsx(Tabs.Trigger, { className: styles$
|
|
16080
|
+
/* @__PURE__ */ jsxRuntime.jsx(Tabs.Trigger, { className: styles$d.tabTrigger, value: "preview", children: /* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { align: "center", gap: "2", children: [
|
|
15465
16081
|
/* @__PURE__ */ jsxRuntime.jsx(blocks.RiIcon, { icon: "RiEyeLine" }),
|
|
15466
16082
|
"Preview"
|
|
15467
16083
|
] }) })
|
|
@@ -15485,8 +16101,8 @@ var __publicField = (obj, key, value) => {
|
|
|
15485
16101
|
render: ({ setValue, value, meta }) => /* @__PURE__ */ jsxRuntime.jsx(InputWithHelpText, { severity: "danger", helpText: meta.error ?? null, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15486
16102
|
blocks.Input,
|
|
15487
16103
|
{
|
|
15488
|
-
className: classNames$1(styles$
|
|
15489
|
-
[styles$
|
|
16104
|
+
className: classNames$1(styles$d.title, {
|
|
16105
|
+
[styles$d.error]: meta.error
|
|
15490
16106
|
}),
|
|
15491
16107
|
placeholder: "Form title",
|
|
15492
16108
|
value,
|
|
@@ -15508,7 +16124,7 @@ var __publicField = (obj, key, value) => {
|
|
|
15508
16124
|
render: ({ setValue, value }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
15509
16125
|
blocks.TextArea,
|
|
15510
16126
|
{
|
|
15511
|
-
className: styles$
|
|
16127
|
+
className: styles$d.description,
|
|
15512
16128
|
placeholder: "Explain the purpose of this form",
|
|
15513
16129
|
value,
|
|
15514
16130
|
onChange: (event) => {
|
|
@@ -15526,7 +16142,7 @@ var __publicField = (obj, key, value) => {
|
|
|
15526
16142
|
/* @__PURE__ */ jsxRuntime.jsx(FieldsEditor, { fieldsOnly }),
|
|
15527
16143
|
/* @__PURE__ */ jsxRuntime.jsx(blocks.Text, { severity: "danger", size: "1", children: typeof formik$1.errors.fields === "string" && formik$1.errors.fields })
|
|
15528
16144
|
] }),
|
|
15529
|
-
/* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { className: styles$
|
|
16145
|
+
/* @__PURE__ */ jsxRuntime.jsxs(blocks.Flex, { className: styles$d.floatingButtonContainer, align: "center", justify: "end", gap: "2", children: [
|
|
15530
16146
|
onCancel && /* @__PURE__ */ jsxRuntime.jsx(blocks.Button, { type: "button", variant: "solid", severity: "info", onClick: onCancel, children: "Cancel" }),
|
|
15531
16147
|
/* @__PURE__ */ jsxRuntime.jsx(blocks.Button, { type: "submit", children: "Save form" })
|
|
15532
16148
|
] })
|
|
@@ -15561,6 +16177,9 @@ var __publicField = (obj, key, value) => {
|
|
|
15561
16177
|
NumberInput,
|
|
15562
16178
|
PatchField,
|
|
15563
16179
|
PatchFormProvider,
|
|
16180
|
+
QrField,
|
|
16181
|
+
QrInput,
|
|
16182
|
+
QrScanner,
|
|
15564
16183
|
SelectField,
|
|
15565
16184
|
SelectInput,
|
|
15566
16185
|
StringField,
|
|
@@ -15575,6 +16194,7 @@ var __publicField = (obj, key, value) => {
|
|
|
15575
16194
|
emptyMultiSelectField,
|
|
15576
16195
|
emptyMultiStringField,
|
|
15577
16196
|
emptyNumberField,
|
|
16197
|
+
emptyQrField,
|
|
15578
16198
|
emptySelectField,
|
|
15579
16199
|
emptyStringField,
|
|
15580
16200
|
emptyTextField,
|
|
@@ -15664,6 +16284,9 @@ var __publicField = (obj, key, value) => {
|
|
|
15664
16284
|
exports2.ProjectFileService = ProjectFileService;
|
|
15665
16285
|
exports2.ProjectService = ProjectService;
|
|
15666
16286
|
exports2.ProjectType = ProjectType;
|
|
16287
|
+
exports2.QrField = QrField;
|
|
16288
|
+
exports2.QrInput = QrInput;
|
|
16289
|
+
exports2.QrScanner = QrScanner;
|
|
15667
16290
|
exports2.SDKContext = SDKContext;
|
|
15668
16291
|
exports2.SDKProvider = SDKProvider;
|
|
15669
16292
|
exports2.SUPPORTED_IMAGE_FILE_TYPES = SUPPORTED_IMAGE_FILE_TYPES;
|
|
@@ -15674,6 +16297,7 @@ var __publicField = (obj, key, value) => {
|
|
|
15674
16297
|
exports2.SpreadsheetViewer = SpreadsheetViewer;
|
|
15675
16298
|
exports2.StringField = StringField;
|
|
15676
16299
|
exports2.StringInput = StringInput;
|
|
16300
|
+
exports2.TeamService = TeamService;
|
|
15677
16301
|
exports2.TextField = TextField;
|
|
15678
16302
|
exports2.TextInput = TextInput;
|
|
15679
16303
|
exports2.UserFormService = UserFormService;
|
|
@@ -15681,6 +16305,7 @@ var __publicField = (obj, key, value) => {
|
|
|
15681
16305
|
exports2.VerificationCodeType = VerificationCodeType;
|
|
15682
16306
|
exports2.WorkspaceService = WorkspaceService;
|
|
15683
16307
|
exports2.YELLOW = YELLOW;
|
|
16308
|
+
exports2._selectLatestFormRevision = _selectLatestFormRevision;
|
|
15684
16309
|
exports2._setLatestRetryTime = _setLatestRetryTime;
|
|
15685
16310
|
exports2.acceptProjectInvite = acceptProjectInvite;
|
|
15686
16311
|
exports2.addActiveProjectFormSubmissionsCount = addActiveProjectFormSubmissionsCount;
|
|
@@ -15698,6 +16323,16 @@ var __publicField = (obj, key, value) => {
|
|
|
15698
16323
|
exports2.addDocuments = addDocuments;
|
|
15699
16324
|
exports2.addEmailDomain = addEmailDomain;
|
|
15700
16325
|
exports2.addFavouriteProjectId = addFavouriteProjectId;
|
|
16326
|
+
exports2.addForm = addForm;
|
|
16327
|
+
exports2.addFormRevision = addFormRevision;
|
|
16328
|
+
exports2.addFormRevisionAttachment = addFormRevisionAttachment;
|
|
16329
|
+
exports2.addFormRevisionAttachments = addFormRevisionAttachments;
|
|
16330
|
+
exports2.addFormRevisions = addFormRevisions;
|
|
16331
|
+
exports2.addFormSubmission = addFormSubmission;
|
|
16332
|
+
exports2.addFormSubmissionAttachment = addFormSubmissionAttachment;
|
|
16333
|
+
exports2.addFormSubmissionAttachments = addFormSubmissionAttachments;
|
|
16334
|
+
exports2.addFormSubmissions = addFormSubmissions;
|
|
16335
|
+
exports2.addForms = addForms;
|
|
15701
16336
|
exports2.addIssue = addIssue;
|
|
15702
16337
|
exports2.addIssueAttachment = addIssueAttachment;
|
|
15703
16338
|
exports2.addIssueAttachments = addIssueAttachments;
|
|
@@ -15717,14 +16352,8 @@ var __publicField = (obj, key, value) => {
|
|
|
15717
16352
|
exports2.addStageCompletion = addStageCompletion;
|
|
15718
16353
|
exports2.addStageCompletions = addStageCompletions;
|
|
15719
16354
|
exports2.addStages = addStages;
|
|
16355
|
+
exports2.addTeam = addTeam;
|
|
15720
16356
|
exports2.addToRecentIssues = addToRecentIssues;
|
|
15721
|
-
exports2.addUserForm = addUserForm;
|
|
15722
|
-
exports2.addUserFormRevision = addUserFormRevision;
|
|
15723
|
-
exports2.addUserFormRevisionAttachment = addUserFormRevisionAttachment;
|
|
15724
|
-
exports2.addUserFormRevisions = addUserFormRevisions;
|
|
15725
|
-
exports2.addUserFormSubmissionAttachment = addUserFormSubmissionAttachment;
|
|
15726
|
-
exports2.addUserFormSubmissions = addUserFormSubmissions;
|
|
15727
|
-
exports2.addUserForms = addUserForms;
|
|
15728
16357
|
exports2.addUsers = addUsers;
|
|
15729
16358
|
exports2.addWorkspace = addWorkspace;
|
|
15730
16359
|
exports2.areArraysEqual = areArraysEqual;
|
|
@@ -15745,6 +16374,7 @@ var __publicField = (obj, key, value) => {
|
|
|
15745
16374
|
exports2.componentStageSlice = componentStageSlice;
|
|
15746
16375
|
exports2.componentTypeReducer = componentTypeReducer;
|
|
15747
16376
|
exports2.componentTypeSlice = componentTypeSlice;
|
|
16377
|
+
exports2.constructUploadedFilePayloads = constructUploadedFilePayloads;
|
|
15748
16378
|
exports2.coordinatesAreEqual = coordinatesAreEqual;
|
|
15749
16379
|
exports2.coordinatesToLiteral = coordinatesToLiteral;
|
|
15750
16380
|
exports2.coordinatesToPointGeometry = coordinatesToPointGeometry;
|
|
@@ -15755,12 +16385,17 @@ var __publicField = (obj, key, value) => {
|
|
|
15755
16385
|
exports2.defaultBadgeColor = defaultBadgeColor;
|
|
15756
16386
|
exports2.defaultStore = defaultStore;
|
|
15757
16387
|
exports2.deleteComponentType = deleteComponentType;
|
|
16388
|
+
exports2.deleteForm = deleteForm;
|
|
16389
|
+
exports2.deleteFormRevision = deleteFormRevision;
|
|
16390
|
+
exports2.deleteFormRevisionAttachment = deleteFormRevisionAttachment;
|
|
16391
|
+
exports2.deleteFormRevisionAttachments = deleteFormRevisionAttachments;
|
|
16392
|
+
exports2.deleteFormRevisions = deleteFormRevisions;
|
|
16393
|
+
exports2.deleteFormSubmission = deleteFormSubmission;
|
|
16394
|
+
exports2.deleteFormSubmissionAttachment = deleteFormSubmissionAttachment;
|
|
16395
|
+
exports2.deleteFormSubmissionAttachments = deleteFormSubmissionAttachments;
|
|
16396
|
+
exports2.deleteFormSubmissions = deleteFormSubmissions;
|
|
15758
16397
|
exports2.deleteProject = deleteProject;
|
|
15759
|
-
exports2.
|
|
15760
|
-
exports2.deleteUserFormRevision = deleteUserFormRevision;
|
|
15761
|
-
exports2.deleteUserFormRevisions = deleteUserFormRevisions;
|
|
15762
|
-
exports2.deleteUserFormSubmission = deleteUserFormSubmission;
|
|
15763
|
-
exports2.deleteUserFormSubmissions = deleteUserFormSubmissions;
|
|
16398
|
+
exports2.deleteTeam = deleteTeam;
|
|
15764
16399
|
exports2.dequeue = dequeue;
|
|
15765
16400
|
exports2.deserialize = deserialize;
|
|
15766
16401
|
exports2.deserializeField = deserializeField;
|
|
@@ -15778,6 +16413,7 @@ var __publicField = (obj, key, value) => {
|
|
|
15778
16413
|
exports2.emptyMultiSelectField = emptyMultiSelectField;
|
|
15779
16414
|
exports2.emptyMultiStringField = emptyMultiStringField;
|
|
15780
16415
|
exports2.emptyNumberField = emptyNumberField;
|
|
16416
|
+
exports2.emptyQrField = emptyQrField;
|
|
15781
16417
|
exports2.emptySelectField = emptySelectField;
|
|
15782
16418
|
exports2.emptyStringField = emptyStringField;
|
|
15783
16419
|
exports2.emptyTextField = emptyTextField;
|
|
@@ -15789,7 +16425,13 @@ var __publicField = (obj, key, value) => {
|
|
|
15789
16425
|
exports2.fileSlice = fileSlice;
|
|
15790
16426
|
exports2.fileToBlob = fileToBlob;
|
|
15791
16427
|
exports2.flipCoordinates = flipCoordinates;
|
|
16428
|
+
exports2.formReducer = formReducer;
|
|
16429
|
+
exports2.formRevisionReducer = formRevisionReducer;
|
|
15792
16430
|
exports2.formRevisionToSchema = formRevisionToSchema;
|
|
16431
|
+
exports2.formRevisionsSlice = formRevisionsSlice;
|
|
16432
|
+
exports2.formSlice = formSlice;
|
|
16433
|
+
exports2.formSubmissionReducer = formSubmissionReducer;
|
|
16434
|
+
exports2.formSubmissionSlice = formSubmissionSlice;
|
|
15793
16435
|
exports2.forms = index;
|
|
15794
16436
|
exports2.fullComponentMarkerSize = fullComponentMarkerSize;
|
|
15795
16437
|
exports2.generateBadgeColors = generateBadgeColors;
|
|
@@ -15917,6 +16559,8 @@ var __publicField = (obj, key, value) => {
|
|
|
15917
16559
|
exports2.selectAttachmentsOfComponentTypeByType = selectAttachmentsOfComponentTypeByType;
|
|
15918
16560
|
exports2.selectAttachmentsOfDocument = selectAttachmentsOfDocument;
|
|
15919
16561
|
exports2.selectAttachmentsOfDocumentByType = selectAttachmentsOfDocumentByType;
|
|
16562
|
+
exports2.selectAttachmentsOfFormRevision = selectAttachmentsOfFormRevision;
|
|
16563
|
+
exports2.selectAttachmentsOfFormSubmission = selectAttachmentsOfFormSubmission;
|
|
15920
16564
|
exports2.selectAttachmentsOfIssue = selectAttachmentsOfIssue;
|
|
15921
16565
|
exports2.selectAttachmentsOfIssueByType = selectAttachmentsOfIssueByType;
|
|
15922
16566
|
exports2.selectAttachmentsOfProject = selectAttachmentsOfProject;
|
|
@@ -15934,11 +16578,9 @@ var __publicField = (obj, key, value) => {
|
|
|
15934
16578
|
exports2.selectComponent = selectComponent;
|
|
15935
16579
|
exports2.selectComponentAttachment = selectComponentAttachment;
|
|
15936
16580
|
exports2.selectComponentAttachmentMapping = selectComponentAttachmentMapping;
|
|
15937
|
-
exports2.selectComponentSubmissionMapping = selectComponentSubmissionMapping;
|
|
15938
16581
|
exports2.selectComponentType = selectComponentType;
|
|
15939
16582
|
exports2.selectComponentTypeAttachment = selectComponentTypeAttachment;
|
|
15940
16583
|
exports2.selectComponentTypeAttachmentMapping = selectComponentTypeAttachmentMapping;
|
|
15941
|
-
exports2.selectComponentTypeForm = selectComponentTypeForm;
|
|
15942
16584
|
exports2.selectComponentTypeFromComponent = selectComponentTypeFromComponent;
|
|
15943
16585
|
exports2.selectComponentTypeFromComponents = selectComponentTypeFromComponents;
|
|
15944
16586
|
exports2.selectComponentTypeStagesMapping = selectComponentTypeStagesMapping;
|
|
@@ -15968,8 +16610,24 @@ var __publicField = (obj, key, value) => {
|
|
|
15968
16610
|
exports2.selectExpandedSections = selectExpandedSections;
|
|
15969
16611
|
exports2.selectFavouriteProjects = selectFavouriteProjects;
|
|
15970
16612
|
exports2.selectFileAttachmentsOfIssue = selectFileAttachmentsOfIssue;
|
|
15971
|
-
exports2.
|
|
16613
|
+
exports2.selectFilteredForms = selectFilteredForms;
|
|
16614
|
+
exports2.selectForm = selectForm;
|
|
16615
|
+
exports2.selectFormMapping = selectFormMapping;
|
|
16616
|
+
exports2.selectFormOfComponentType = selectFormOfComponentType;
|
|
15972
16617
|
exports2.selectFormRevision = selectFormRevision;
|
|
16618
|
+
exports2.selectFormRevisionMapping = selectFormRevisionMapping;
|
|
16619
|
+
exports2.selectFormRevisions = selectFormRevisions;
|
|
16620
|
+
exports2.selectFormRevisionsOfForm = selectFormRevisionsOfForm;
|
|
16621
|
+
exports2.selectFormSubmission = selectFormSubmission;
|
|
16622
|
+
exports2.selectFormSubmissionAttachmentsMapping = selectFormSubmissionAttachmentsMapping;
|
|
16623
|
+
exports2.selectFormSubmissions = selectFormSubmissions;
|
|
16624
|
+
exports2.selectFormSubmissionsByComponents = selectFormSubmissionsByComponents;
|
|
16625
|
+
exports2.selectFormSubmissionsMapping = selectFormSubmissionsMapping;
|
|
16626
|
+
exports2.selectFormSubmissionsOfComponent = selectFormSubmissionsOfComponent;
|
|
16627
|
+
exports2.selectFormSubmissionsOfForm = selectFormSubmissionsOfForm;
|
|
16628
|
+
exports2.selectFormSubmissionsOfIssue = selectFormSubmissionsOfIssue;
|
|
16629
|
+
exports2.selectFormsCount = selectFormsCount;
|
|
16630
|
+
exports2.selectGeneralFormCount = selectGeneralFormCount;
|
|
15973
16631
|
exports2.selectHiddenCategoryCount = selectHiddenCategoryCount;
|
|
15974
16632
|
exports2.selectHiddenComponentTypeIds = selectHiddenComponentTypeIds;
|
|
15975
16633
|
exports2.selectIsFetchingInitialData = selectIsFetchingInitialData;
|
|
@@ -15984,10 +16642,10 @@ var __publicField = (obj, key, value) => {
|
|
|
15984
16642
|
exports2.selectIssueUpdateMapping = selectIssueUpdateMapping;
|
|
15985
16643
|
exports2.selectIssueUpdatesOfIssue = selectIssueUpdatesOfIssue;
|
|
15986
16644
|
exports2.selectIssues = selectIssues;
|
|
15987
|
-
exports2.
|
|
16645
|
+
exports2.selectLatestFormRevisionByForm = selectLatestFormRevisionByForm;
|
|
16646
|
+
exports2.selectLatestFormRevisionOfForm = selectLatestFormRevisionOfForm;
|
|
16647
|
+
exports2.selectLatestFormRevisionsOfComponentTypes = selectLatestFormRevisionsOfComponentTypes;
|
|
15988
16648
|
exports2.selectLatestRetryTime = selectLatestRetryTime;
|
|
15989
|
-
exports2.selectLatestRevisionByFormId = selectLatestRevisionByFormId;
|
|
15990
|
-
exports2.selectLatestRevisionsFromComponentTypeIds = selectLatestRevisionsFromComponentTypeIds;
|
|
15991
16649
|
exports2.selectLicense = selectLicense;
|
|
15992
16650
|
exports2.selectLicenseForProject = selectLicenseForProject;
|
|
15993
16651
|
exports2.selectLicenses = selectLicenses;
|
|
@@ -15996,8 +16654,6 @@ var __publicField = (obj, key, value) => {
|
|
|
15996
16654
|
exports2.selectMapStyle = selectMapStyle;
|
|
15997
16655
|
exports2.selectNumberOfComponentTypesMatchingCaseInsensitiveName = selectNumberOfComponentTypesMatchingCaseInsensitiveName;
|
|
15998
16656
|
exports2.selectNumberOfComponentsOfComponentType = selectNumberOfComponentsOfComponentType;
|
|
15999
|
-
exports2.selectNumberOfGeneralUserForms = selectNumberOfGeneralUserForms;
|
|
16000
|
-
exports2.selectNumberOfUserForms = selectNumberOfUserForms;
|
|
16001
16657
|
exports2.selectOrganization = selectOrganization;
|
|
16002
16658
|
exports2.selectOrganizationAccess = selectOrganizationAccess;
|
|
16003
16659
|
exports2.selectOrganizationAccessForUser = selectOrganizationAccessForUser;
|
|
@@ -16025,8 +16681,6 @@ var __publicField = (obj, key, value) => {
|
|
|
16025
16681
|
exports2.selectRecentIssuesAsSearchResults = selectRecentIssuesAsSearchResults;
|
|
16026
16682
|
exports2.selectRecentProjects = selectRecentProjects;
|
|
16027
16683
|
exports2.selectRehydrated = selectRehydrated;
|
|
16028
|
-
exports2.selectRevisionAttachments = selectRevisionAttachments;
|
|
16029
|
-
exports2.selectRevisionsForForm = selectRevisionsForForm;
|
|
16030
16684
|
exports2.selectRootDocuments = selectRootDocuments;
|
|
16031
16685
|
exports2.selectShowTooltips = selectShowTooltips;
|
|
16032
16686
|
exports2.selectSortedEmailDomains = selectSortedEmailDomains;
|
|
@@ -16041,16 +16695,15 @@ var __publicField = (obj, key, value) => {
|
|
|
16041
16695
|
exports2.selectStagesFromComponentType = selectStagesFromComponentType;
|
|
16042
16696
|
exports2.selectStagesFromComponentTypeIds = selectStagesFromComponentTypeIds;
|
|
16043
16697
|
exports2.selectStagesFromStageIds = selectStagesFromStageIds;
|
|
16044
|
-
exports2.
|
|
16045
|
-
exports2.
|
|
16046
|
-
exports2.
|
|
16047
|
-
exports2.
|
|
16698
|
+
exports2.selectTeam = selectTeam;
|
|
16699
|
+
exports2.selectTeams = selectTeams;
|
|
16700
|
+
exports2.selectTeamsMapping = selectTeamsMapping;
|
|
16701
|
+
exports2.selectTeamsOfOrganization = selectTeamsOfOrganization;
|
|
16702
|
+
exports2.selectTeamsOfUser = selectTeamsOfUser;
|
|
16048
16703
|
exports2.selectUploadUrl = selectUploadUrl;
|
|
16049
16704
|
exports2.selectUsedColors = selectUsedColors;
|
|
16050
16705
|
exports2.selectUser = selectUser;
|
|
16051
|
-
exports2.
|
|
16052
|
-
exports2.selectUserFormMapping = selectUserFormMapping;
|
|
16053
|
-
exports2.selectUserFormSubmission = selectUserFormSubmission;
|
|
16706
|
+
exports2.selectUserFormRevisionAttachmentsMapping = selectUserFormRevisionAttachmentsMapping;
|
|
16054
16707
|
exports2.selectUsersAsMapping = selectUsersAsMapping;
|
|
16055
16708
|
exports2.selectVisibleStatuses = selectVisibleStatuses;
|
|
16056
16709
|
exports2.selectVisibleUserIds = selectVisibleUserIds;
|
|
@@ -16077,6 +16730,13 @@ var __publicField = (obj, key, value) => {
|
|
|
16077
16730
|
exports2.setEnableClustering = setEnableClustering;
|
|
16078
16731
|
exports2.setEnableDuplicateIssues = setEnableDuplicateIssues;
|
|
16079
16732
|
exports2.setEnablePlacementMode = setEnablePlacementMode;
|
|
16733
|
+
exports2.setFormRevision = setFormRevision;
|
|
16734
|
+
exports2.setFormRevisionAttachments = setFormRevisionAttachments;
|
|
16735
|
+
exports2.setFormRevisions = setFormRevisions;
|
|
16736
|
+
exports2.setFormSubmission = setFormSubmission;
|
|
16737
|
+
exports2.setFormSubmissionAttachments = setFormSubmissionAttachments;
|
|
16738
|
+
exports2.setFormSubmissions = setFormSubmissions;
|
|
16739
|
+
exports2.setForms = setForms;
|
|
16080
16740
|
exports2.setIsFetchingInitialData = setIsFetchingInitialData;
|
|
16081
16741
|
exports2.setIsImportingProjectFile = setIsImportingProjectFile;
|
|
16082
16742
|
exports2.setIsLoading = setIsLoading;
|
|
@@ -16098,12 +16758,11 @@ var __publicField = (obj, key, value) => {
|
|
|
16098
16758
|
exports2.setSectionExpanded = setSectionExpanded;
|
|
16099
16759
|
exports2.setShowTooltips = setShowTooltips;
|
|
16100
16760
|
exports2.setStageCompletions = setStageCompletions;
|
|
16761
|
+
exports2.setTeam = setTeam;
|
|
16762
|
+
exports2.setTeams = setTeams;
|
|
16101
16763
|
exports2.setTokens = setTokens;
|
|
16102
16764
|
exports2.setTourStep = setTourStep;
|
|
16103
16765
|
exports2.setUploadUrl = setUploadUrl;
|
|
16104
|
-
exports2.setUserFormRevisionAttachments = setUserFormRevisionAttachments;
|
|
16105
|
-
exports2.setUserFormSubmissionAttachments = setUserFormSubmissionAttachments;
|
|
16106
|
-
exports2.setUserFormSubmissions = setUserFormSubmissions;
|
|
16107
16766
|
exports2.setUsers = setUsers;
|
|
16108
16767
|
exports2.setVisibleStatuses = setVisibleStatuses;
|
|
16109
16768
|
exports2.setVisibleUserIds = setVisibleUserIds;
|
|
@@ -16114,6 +16773,8 @@ var __publicField = (obj, key, value) => {
|
|
|
16114
16773
|
exports2.slugify = slugify;
|
|
16115
16774
|
exports2.spacesToDashesLower = spacesToDashesLower;
|
|
16116
16775
|
exports2.successColor = successColor;
|
|
16776
|
+
exports2.teamReducer = teamReducer;
|
|
16777
|
+
exports2.teamSlice = teamSlice;
|
|
16117
16778
|
exports2.toFileNameSafeString = toFileNameSafeString;
|
|
16118
16779
|
exports2.toOfflineIdRecord = toOfflineIdRecord;
|
|
16119
16780
|
exports2.toggleComponentTypeVisibility = toggleComponentTypeVisibility;
|
|
@@ -16128,15 +16789,18 @@ var __publicField = (obj, key, value) => {
|
|
|
16128
16789
|
exports2.updateComponentTypeAttachment = updateComponentTypeAttachment;
|
|
16129
16790
|
exports2.updateDocumentAttachment = updateDocumentAttachment;
|
|
16130
16791
|
exports2.updateDocuments = updateDocuments;
|
|
16792
|
+
exports2.updateFormSubmission = updateFormSubmission;
|
|
16793
|
+
exports2.updateFormSubmissionAttachments = updateFormSubmissionAttachments;
|
|
16794
|
+
exports2.updateFormSubmissions = updateFormSubmissions;
|
|
16131
16795
|
exports2.updateIssue = updateIssue;
|
|
16132
16796
|
exports2.updateIssueAttachment = updateIssueAttachment;
|
|
16133
16797
|
exports2.updateLicense = updateLicense;
|
|
16134
16798
|
exports2.updateOrCreateProject = updateOrCreateProject;
|
|
16135
|
-
exports2.updateOrCreateUserFormSubmission = updateOrCreateUserFormSubmission;
|
|
16136
16799
|
exports2.updateOrganizationAccess = updateOrganizationAccess;
|
|
16137
16800
|
exports2.updateProjectAccess = updateProjectAccess;
|
|
16138
16801
|
exports2.updateProjectAttachment = updateProjectAttachment;
|
|
16139
16802
|
exports2.updateStages = updateStages;
|
|
16803
|
+
exports2.updateTeam = updateTeam;
|
|
16140
16804
|
exports2.useAppDispatch = useAppDispatch;
|
|
16141
16805
|
exports2.useAppSelector = useAppSelector;
|
|
16142
16806
|
exports2.useFieldInput = useFieldInput;
|
|
@@ -16146,8 +16810,6 @@ var __publicField = (obj, key, value) => {
|
|
|
16146
16810
|
exports2.useFormikInput = useFormikInput;
|
|
16147
16811
|
exports2.useMemoCompare = useMemoCompare;
|
|
16148
16812
|
exports2.useSDK = useSDK;
|
|
16149
|
-
exports2.userFormReducer = userFormReducer;
|
|
16150
|
-
exports2.userFormSlice = userFormSlice;
|
|
16151
16813
|
exports2.userReducer = userReducer;
|
|
16152
16814
|
exports2.userSlice = userSlice;
|
|
16153
16815
|
exports2.valueIsFile = valueIsFile;
|