@wordpress/preferences
Version:
Utilities for managing WordPress preferences.
67 lines (66 loc) • 1.73 kB
JavaScript
// packages/preferences/src/components/preference-toggle-menu-item/index.tsx
import { useSelect, useDispatch } from "@wordpress/data";
import { MenuItem } from "@wordpress/components";
import { __, sprintf } from "@wordpress/i18n";
import { check } from "@wordpress/icons";
import { speak } from "@wordpress/a11y";
import { store as preferencesStore } from "../../store";
import { jsx } from "react/jsx-runtime";
function PreferenceToggleMenuItem({
scope,
name,
label,
info,
messageActivated,
messageDeactivated,
shortcut,
handleToggling = true,
onToggle = () => null,
disabled = false
}) {
const isActive = useSelect(
(select) => !!select(preferencesStore).get(scope, name),
[scope, name]
);
const { toggle } = useDispatch(preferencesStore);
const speakMessage = () => {
if (isActive) {
const message = messageDeactivated || sprintf(
/* translators: %s: preference name, e.g. 'Fullscreen mode' */
__("Preference deactivated - %s"),
label
);
speak(message);
} else {
const message = messageActivated || sprintf(
/* translators: %s: preference name, e.g. 'Fullscreen mode' */
__("Preference activated - %s"),
label
);
speak(message);
}
};
return /* @__PURE__ */ jsx(
MenuItem,
{
icon: isActive ? check : null,
isSelected: isActive,
onClick: () => {
onToggle();
if (handleToggling) {
toggle(scope, name);
}
speakMessage();
},
role: "menuitemcheckbox",
info,
shortcut,
disabled,
children: label
}
);
}
export {
PreferenceToggleMenuItem as default
};
//# sourceMappingURL=index.js.map