@wordpress/core-data
Version:
Access to and manipulation of core WordPress entities.
83 lines (82 loc) • 2.45 kB
JavaScript
// packages/core-data/src/hooks/use-entity-record.ts
import { useDispatch, useSelect } from "@wordpress/data";
import deprecated from "@wordpress/deprecated";
import { useMemo } from "@wordpress/element";
import { store as coreStore } from "../index.mjs";
import { getResolutionStatus } from "./utils.mjs";
var EMPTY_OBJECT = {};
function useEntityRecord(kind, name, recordId, options = { enabled: true }) {
const { editEntityRecord, saveEditedEntityRecord } = useDispatch(coreStore);
const mutations = useMemo(
() => ({
edit: (record2, editOptions = {}) => editEntityRecord(kind, name, recordId, record2, editOptions),
save: (saveOptions = {}) => saveEditedEntityRecord(kind, name, recordId, {
throwOnError: true,
...saveOptions
})
}),
[editEntityRecord, kind, name, recordId, saveEditedEntityRecord]
);
const { record, editedRecord, hasEdits, edits, ...resolution } = useSelect(
(select) => {
if (!options.enabled) {
return {
record: null,
editedRecord: EMPTY_OBJECT,
hasEdits: false,
edits: EMPTY_OBJECT,
...getResolutionStatus()
};
}
const storeSelectors = select(coreStore);
const resolutionStatus = storeSelectors.getResolutionState(
"getEntityRecord",
[kind, name, recordId]
)?.status;
return {
record: storeSelectors.getEntityRecord(
kind,
name,
recordId
) ?? null,
editedRecord: storeSelectors.getEditedEntityRecord(
kind,
name,
recordId
),
hasEdits: storeSelectors.hasEditsForEntityRecord(
kind,
name,
recordId
),
edits: storeSelectors.getEntityRecordNonTransientEdits(
kind,
name,
recordId
),
...getResolutionStatus(resolutionStatus)
};
},
[kind, name, recordId, options.enabled]
);
return {
record,
editedRecord,
hasEdits,
edits,
...resolution,
...mutations
};
}
function useDeprecatedEntityRecord(kind, name, recordId, options) {
deprecated(`wp.data.__experimentalUseEntityRecord`, {
alternative: "wp.data.useEntityRecord",
since: "6.1"
});
return useEntityRecord(kind, name, recordId, options);
}
export {
useEntityRecord as default,
useDeprecatedEntityRecord
};
//# sourceMappingURL=use-entity-record.mjs.map