@wordpress/block-editor
Version:
8 lines (7 loc) • 4.5 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/block-alignment-control/use-available-alignments.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useLayout } from '../block-list/layout';\nimport { store as blockEditorStore } from '../../store';\nimport { getLayoutType } from '../../layouts';\n\nconst EMPTY_ARRAY = [];\nconst DEFAULT_CONTROLS = [ 'none', 'left', 'center', 'right', 'wide', 'full' ];\nconst WIDE_CONTROLS = [ 'wide', 'full' ];\n\nexport default function useAvailableAlignments( controls = DEFAULT_CONTROLS ) {\n\t// Always add the `none` option if not exists.\n\tif ( ! controls.includes( 'none' ) ) {\n\t\tcontrols = [ 'none', ...controls ];\n\t}\n\tconst isNoneOnly = controls.length === 1 && controls[ 0 ] === 'none';\n\n\tconst [ wideControlsEnabled, themeSupportsLayout, isBlockBasedTheme ] =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\t// If `isNoneOnly` is true, we'll be returning early because there is\n\t\t\t\t// nothing to filter on an empty array. We won't need the info from\n\t\t\t\t// the `useSelect` but we must call it anyway because Rules of Hooks.\n\t\t\t\t// So the callback returns early to avoid block editor subscription.\n\t\t\t\tif ( isNoneOnly ) {\n\t\t\t\t\treturn [ false, false, false ];\n\t\t\t\t}\n\n\t\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\t\t\treturn [\n\t\t\t\t\tsettings.alignWide ?? false,\n\t\t\t\t\tsettings.supportsLayout,\n\t\t\t\t\tsettings.__unstableIsBlockBasedTheme,\n\t\t\t\t];\n\t\t\t},\n\t\t\t[ isNoneOnly ]\n\t\t);\n\tconst layout = useLayout();\n\n\tif ( isNoneOnly ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst layoutType = getLayoutType( layout?.type );\n\n\tif ( themeSupportsLayout ) {\n\t\tconst layoutAlignments = layoutType.getAlignments(\n\t\t\tlayout,\n\t\t\tisBlockBasedTheme\n\t\t);\n\t\tconst alignments = layoutAlignments.filter( ( alignment ) =>\n\t\t\tcontrols.includes( alignment.name )\n\t\t);\n\t\t// While we treat `none` as an alignment, we shouldn't return it if no\n\t\t// other alignments exist.\n\t\tif ( alignments.length === 1 && alignments[ 0 ].name === 'none' ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn alignments;\n\t}\n\n\t// Starting here, it's the fallback for themes not supporting the layout config.\n\tif ( layoutType.name !== 'default' && layoutType.name !== 'constrained' ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst alignments = controls\n\t\t.filter( ( control ) => {\n\t\t\tif ( layout.alignments ) {\n\t\t\t\treturn layout.alignments.includes( control );\n\t\t\t}\n\n\t\t\tif ( ! wideControlsEnabled && WIDE_CONTROLS.includes( control ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn DEFAULT_CONTROLS.includes( control );\n\t\t} )\n\t\t.map( ( name ) => ( { name } ) );\n\n\t// While we treat `none` as an alignment, we shouldn't return it if no\n\t// other alignments exist.\n\tif ( alignments.length === 1 && alignments[ 0 ].name === 'none' ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\treturn alignments;\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA0B;AAK1B,oBAA0B;AAC1B,mBAA0C;AAC1C,qBAA8B;AAE9B,IAAM,cAAc,CAAC;AACrB,IAAM,mBAAmB,CAAE,QAAQ,QAAQ,UAAU,SAAS,QAAQ,MAAO;AAC7E,IAAM,gBAAgB,CAAE,QAAQ,MAAO;AAExB,SAAR,uBAAyC,WAAW,kBAAmB;AAE7E,MAAK,CAAE,SAAS,SAAU,MAAO,GAAI;AACpC,eAAW,CAAE,QAAQ,GAAG,QAAS;AAAA,EAClC;AACA,QAAM,aAAa,SAAS,WAAW,KAAK,SAAU,CAAE,MAAM;AAE9D,QAAM,CAAE,qBAAqB,qBAAqB,iBAAkB,QACnE;AAAA,IACC,CAAE,WAAY;AAKb,UAAK,YAAa;AACjB,eAAO,CAAE,OAAO,OAAO,KAAM;AAAA,MAC9B;AAEA,YAAM,WAAW,OAAQ,aAAAA,KAAiB,EAAE,YAAY;AACxD,aAAO;AAAA,QACN,SAAS,aAAa;AAAA,QACtB,SAAS;AAAA,QACT,SAAS;AAAA,MACV;AAAA,IACD;AAAA,IACA,CAAE,UAAW;AAAA,EACd;AACD,QAAM,aAAS,yBAAU;AAEzB,MAAK,YAAa;AACjB,WAAO;AAAA,EACR;AAEA,QAAM,iBAAa,8BAAe,QAAQ,IAAK;AAE/C,MAAK,qBAAsB;AAC1B,UAAM,mBAAmB,WAAW;AAAA,MACnC;AAAA,MACA;AAAA,IACD;AACA,UAAMC,cAAa,iBAAiB;AAAA,MAAQ,CAAE,cAC7C,SAAS,SAAU,UAAU,IAAK;AAAA,IACnC;AAGA,QAAKA,YAAW,WAAW,KAAKA,YAAY,CAAE,EAAE,SAAS,QAAS;AACjE,aAAO;AAAA,IACR;AACA,WAAOA;AAAA,EACR;AAGA,MAAK,WAAW,SAAS,aAAa,WAAW,SAAS,eAAgB;AACzE,WAAO;AAAA,EACR;AAEA,QAAM,aAAa,SACjB,OAAQ,CAAE,YAAa;AACvB,QAAK,OAAO,YAAa;AACxB,aAAO,OAAO,WAAW,SAAU,OAAQ;AAAA,IAC5C;AAEA,QAAK,CAAE,uBAAuB,cAAc,SAAU,OAAQ,GAAI;AACjE,aAAO;AAAA,IACR;AAEA,WAAO,iBAAiB,SAAU,OAAQ;AAAA,EAC3C,CAAE,EACD,IAAK,CAAE,UAAY,EAAE,KAAK,EAAI;AAIhC,MAAK,WAAW,WAAW,KAAK,WAAY,CAAE,EAAE,SAAS,QAAS;AACjE,WAAO;AAAA,EACR;AAEA,SAAO;AACR;",
"names": ["blockEditorStore", "alignments"]
}