@tellescope/react-components 1.224.0 → 1.226.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/lib/cjs/CMS/ContentViewer.d.ts.map +1 -1
- package/lib/cjs/CMS/ContentViewer.js +28 -11
- package/lib/cjs/CMS/ContentViewer.js.map +1 -1
- package/lib/cjs/Forms/form_responses.d.ts.map +1 -1
- package/lib/cjs/Forms/form_responses.js +2 -2
- package/lib/cjs/Forms/form_responses.js.map +1 -1
- package/lib/cjs/Forms/forms.d.ts.map +1 -1
- package/lib/cjs/Forms/forms.js +81 -9
- package/lib/cjs/Forms/forms.js.map +1 -1
- package/lib/cjs/Forms/hooks.d.ts +6 -1
- package/lib/cjs/Forms/hooks.d.ts.map +1 -1
- package/lib/cjs/Forms/hooks.js +66 -12
- package/lib/cjs/Forms/hooks.js.map +1 -1
- package/lib/cjs/Forms/inputs.d.ts +1 -1
- package/lib/cjs/Forms/inputs.js +3 -3
- package/lib/cjs/Forms/inputs.js.map +1 -1
- package/lib/cjs/state.d.ts.map +1 -1
- package/lib/cjs/state.js +50 -25
- package/lib/cjs/state.js.map +1 -1
- package/lib/esm/CMS/ContentViewer.d.ts.map +1 -1
- package/lib/esm/CMS/ContentViewer.js +28 -11
- package/lib/esm/CMS/ContentViewer.js.map +1 -1
- package/lib/esm/Forms/form_responses.d.ts.map +1 -1
- package/lib/esm/Forms/form_responses.js +2 -2
- package/lib/esm/Forms/form_responses.js.map +1 -1
- package/lib/esm/Forms/forms.d.ts.map +1 -1
- package/lib/esm/Forms/forms.js +82 -10
- package/lib/esm/Forms/forms.js.map +1 -1
- package/lib/esm/Forms/hooks.d.ts +6 -1
- package/lib/esm/Forms/hooks.d.ts.map +1 -1
- package/lib/esm/Forms/hooks.js +66 -12
- package/lib/esm/Forms/hooks.js.map +1 -1
- package/lib/esm/Forms/inputs.d.ts +1 -1
- package/lib/esm/Forms/inputs.js +3 -3
- package/lib/esm/Forms/inputs.js.map +1 -1
- package/lib/esm/state.d.ts.map +1 -1
- package/lib/esm/state.js +50 -25
- package/lib/esm/state.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/src/CMS/ContentViewer.tsx +38 -10
- package/src/Forms/form_responses.tsx +16 -14
- package/src/Forms/forms.tsx +129 -15
- package/src/Forms/hooks.tsx +77 -9
- package/src/Forms/inputs.tsx +3 -3
- package/src/state.tsx +57 -29
package/src/state.tsx
CHANGED
|
@@ -887,32 +887,29 @@ export const useListStateHook = <T extends { id: string | number }, ADD extends
|
|
|
887
887
|
// prevent frequent refetches
|
|
888
888
|
if (value && options?.reload && didFetch('findById' + modelName + id, true)) return value
|
|
889
889
|
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
batchRef.current.nextBatch.push(id.toString()) // fetch in next batch if currently fetching
|
|
898
|
-
} else {
|
|
899
|
-
batchRef.current.ids.push(id.toString())
|
|
900
|
-
}
|
|
890
|
+
// Handle batch requests separately - always allow queueing for batch
|
|
891
|
+
if (options?.batch) {
|
|
892
|
+
if (!batchRef.current.nextBatch.includes(id.toString()) && !batchRef.current.ids.includes(id.toString())) {
|
|
893
|
+
if (batchRef.current.fetching) {
|
|
894
|
+
batchRef.current.nextBatch.push(id.toString()) // fetch in next batch if currently fetching
|
|
895
|
+
} else {
|
|
896
|
+
batchRef.current.ids.push(id.toString())
|
|
901
897
|
}
|
|
902
|
-
} else {
|
|
903
|
-
findOne?.(id.toString())
|
|
904
|
-
.then(found => {
|
|
905
|
-
// prevent unnecessary re-renders by calling addLocalElement, when the exact value already exists
|
|
906
|
-
const existingUnchanged = value_is_loaded(state) && state.value.find(v => v.id === id && objects_equivalent(v, found))
|
|
907
|
-
if (existingUnchanged) return
|
|
908
|
-
|
|
909
|
-
addLocalElement(found, { replaceIfMatch: true })
|
|
910
|
-
})
|
|
911
|
-
.catch(e => {
|
|
912
|
-
setFetched('recordNotFound' + modelName + id, true) // mark record not found for id
|
|
913
|
-
console.error(e)
|
|
914
|
-
})
|
|
915
898
|
}
|
|
899
|
+
} else if (options?.reload || (value === undefined && !didFetch('findById' + modelName + id))) {
|
|
900
|
+
setFetched('findById' + modelName + id, true) // prevent multiple API calls
|
|
901
|
+
findOne?.(id.toString())
|
|
902
|
+
.then(found => {
|
|
903
|
+
// prevent unnecessary re-renders by calling addLocalElement, when the exact value already exists
|
|
904
|
+
const existingUnchanged = value_is_loaded(state) && state.value.find(v => v.id === id && objects_equivalent(v, found))
|
|
905
|
+
if (existingUnchanged) return
|
|
906
|
+
|
|
907
|
+
addLocalElement(found, { replaceIfMatch: true })
|
|
908
|
+
})
|
|
909
|
+
.catch(e => {
|
|
910
|
+
setFetched('recordNotFound' + modelName + id, true) // mark record not found for id
|
|
911
|
+
console.error(e)
|
|
912
|
+
})
|
|
916
913
|
}
|
|
917
914
|
|
|
918
915
|
return value
|
|
@@ -931,30 +928,61 @@ export const useListStateHook = <T extends { id: string | number }, ADD extends
|
|
|
931
928
|
}
|
|
932
929
|
|
|
933
930
|
batchRef.current.fetching = true
|
|
931
|
+
const currentBatchIds = batchRef.current.ids.slice(0, BULK_READ_DEFAULT_LIMIT)
|
|
932
|
+
|
|
933
|
+
// Filter out IDs that are already loaded to prevent unnecessary fetching
|
|
934
|
+
const idsToFetch = currentBatchIds.filter(id => {
|
|
935
|
+
const alreadyLoaded = state.status === LoadingStatus.Loaded &&
|
|
936
|
+
state.value.find(v => v.id.toString() === id.toString())
|
|
937
|
+
return !alreadyLoaded
|
|
938
|
+
})
|
|
939
|
+
|
|
940
|
+
// Only make API call if there are actually IDs to fetch
|
|
941
|
+
if (idsToFetch.length === 0) {
|
|
942
|
+
// Mark all IDs as processed even though they were already loaded
|
|
943
|
+
currentBatchIds.forEach(id => {
|
|
944
|
+
setFetched('findById' + modelName + id, true)
|
|
945
|
+
})
|
|
946
|
+
|
|
947
|
+
// Continue to next batch
|
|
948
|
+
batchRef.current.ids = batchRef.current.nextBatch
|
|
949
|
+
batchRef.current.nextBatch = []
|
|
950
|
+
batchRef.current.fetching = false
|
|
951
|
+
return
|
|
952
|
+
}
|
|
953
|
+
|
|
934
954
|
findByIds({
|
|
935
|
-
ids:
|
|
955
|
+
ids: idsToFetch,
|
|
936
956
|
})
|
|
937
957
|
.then(({ matches }) => {
|
|
938
|
-
if (matches.length) {
|
|
958
|
+
if (matches.length) {
|
|
939
959
|
addLocalElements(matches, { replaceIfMatch: true })
|
|
940
|
-
options?.onBulkRead?.(matches)
|
|
960
|
+
options?.onBulkRead?.(matches)
|
|
941
961
|
}
|
|
962
|
+
// Mark all fetched IDs as complete (both successful and failed)
|
|
963
|
+
currentBatchIds.forEach(id => {
|
|
964
|
+
setFetched('findById' + modelName + id, true)
|
|
965
|
+
})
|
|
942
966
|
})
|
|
943
967
|
.catch(err => {
|
|
944
968
|
console.error(err)
|
|
969
|
+
// Mark failed IDs as not found
|
|
970
|
+
currentBatchIds.forEach(id => {
|
|
971
|
+
setFetched('recordNotFound' + modelName + id, true)
|
|
972
|
+
})
|
|
945
973
|
})
|
|
946
974
|
.finally(() => {
|
|
947
975
|
// ensure we make progress to prevent looping on an error
|
|
948
976
|
batchRef.current.ids = batchRef.current.nextBatch
|
|
949
977
|
batchRef.current.nextBatch = []
|
|
950
|
-
|
|
978
|
+
|
|
951
979
|
// allow next fetch
|
|
952
980
|
batchRef.current.fetching = false
|
|
953
981
|
})
|
|
954
982
|
}, 333)
|
|
955
983
|
|
|
956
984
|
return () => { clearInterval(i) }
|
|
957
|
-
}, [findByIds, addLocalElements, options?.onBulkRead])
|
|
985
|
+
}, [findByIds, addLocalElements, options?.onBulkRead, setFetched, modelName])
|
|
958
986
|
|
|
959
987
|
const findByFilter: ListUpdateMethods<T, ADD>['findByFilter'] = useCallback((filter, options) => {
|
|
960
988
|
const loadFilter = options?.loadFilter
|