@wordpress/core-data
Version:
Access to and manipulation of core WordPress entities.
81 lines (80 loc) • 2.32 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 useQuerySelect from "./use-query-select";
import { store as coreStore } from "../";
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 { editedRecord, hasEdits, edits } = useSelect(
(select) => {
if (!options.enabled) {
return {
editedRecord: EMPTY_OBJECT,
hasEdits: false,
edits: EMPTY_OBJECT
};
}
return {
editedRecord: select(coreStore).getEditedEntityRecord(
kind,
name,
recordId
),
hasEdits: select(coreStore).hasEditsForEntityRecord(
kind,
name,
recordId
),
edits: select(coreStore).getEntityRecordNonTransientEdits(
kind,
name,
recordId
)
};
},
[kind, name, recordId, options.enabled]
);
const { data: record, ...querySelectRest } = useQuerySelect(
(query) => {
if (!options.enabled) {
return {
data: null
};
}
return query(coreStore).getEntityRecord(kind, name, recordId);
},
[kind, name, recordId, options.enabled]
);
return {
record,
editedRecord,
hasEdits,
edits,
...querySelectRest,
...mutations
};
}
function __experimentalUseEntityRecord(kind, name, recordId, options) {
deprecated(`wp.data.__experimentalUseEntityRecord`, {
alternative: "wp.data.useEntityRecord",
since: "6.1"
});
return useEntityRecord(kind, name, recordId, options);
}
export {
__experimentalUseEntityRecord,
useEntityRecord as default
};
//# sourceMappingURL=use-entity-record.js.map