UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 2.94 kB
{ "version": 3, "sources": ["../../src/hooks/generate-fields-from-attributes.js"], "sourcesContent": ["/**\n * Generates DataForm field definitions from block attributes.\n *\n * This utility enables PHP-only blocks to have auto-generated inspector controls\n * by converting block attribute definitions into DataForm field definitions.\n *\n * @param {Object} attributes - Block type attributes from block registration\n * @return {{ fields: Array, form: Object }} fieldsKey and formKey values\n */\nexport function generateFieldsFromAttributes( attributes ) {\n\tconst fields = [];\n\tconst fieldIds = [];\n\n\tObject.entries( attributes ).forEach( ( [ name, def ] ) => {\n\t\tif ( ! def.__experimentalAutoInspectorControl ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst field = createFieldFromAttribute( name, def );\n\t\tif ( field ) {\n\t\t\tfields.push( field );\n\t\t\tfieldIds.push( name );\n\t\t}\n\t} );\n\n\treturn {\n\t\tfields,\n\t\tform: { fields: fieldIds },\n\t};\n}\n\n/**\n * Creates a DataForm field definition from a block attribute definition.\n *\n * @param {string} name - The attribute name\n * @param {Object} def - The attribute definition from block.json\n * @return {Object|null} DataForm field definition or null if type not supported\n */\nfunction createFieldFromAttribute( name, def ) {\n\tconst type = def.type;\n\n\t// Skip unsupported types (object, union types, etc.)\n\t// Supported: string\u2192text, number, integer, boolean (1:1 with DataForm)\n\tif ( ! [ 'string', 'number', 'integer', 'boolean' ].includes( type ) ) {\n\t\treturn null;\n\t}\n\n\tconst field = {\n\t\tid: name,\n\t\tlabel: def.label || name,\n\t\t// Only 'string' needs mapping to 'text'; others are 1:1 with DataForm types.\n\t\t// This mapping will be unnecessary once #74105 lands.\n\t\ttype: type === 'string' ? 'text' : type,\n\t};\n\n\t// Add elements for enums (DataForm shows select UI when elements are present)\n\tif ( def.enum && Array.isArray( def.enum ) ) {\n\t\tfield.elements = def.enum.map( ( value ) => ( {\n\t\t\tvalue,\n\t\t\tlabel: String( value ),\n\t\t} ) );\n\t}\n\n\treturn field;\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASO,SAAS,6BAA8B,YAAa;AAC1D,QAAM,SAAS,CAAC;AAChB,QAAM,WAAW,CAAC;AAElB,SAAO,QAAS,UAAW,EAAE,QAAS,CAAE,CAAE,MAAM,GAAI,MAAO;AAC1D,QAAK,CAAE,IAAI,oCAAqC;AAC/C;AAAA,IACD;AAEA,UAAM,QAAQ,yBAA0B,MAAM,GAAI;AAClD,QAAK,OAAQ;AACZ,aAAO,KAAM,KAAM;AACnB,eAAS,KAAM,IAAK;AAAA,IACrB;AAAA,EACD,CAAE;AAEF,SAAO;AAAA,IACN;AAAA,IACA,MAAM,EAAE,QAAQ,SAAS;AAAA,EAC1B;AACD;AASA,SAAS,yBAA0B,MAAM,KAAM;AAC9C,QAAM,OAAO,IAAI;AAIjB,MAAK,CAAE,CAAE,UAAU,UAAU,WAAW,SAAU,EAAE,SAAU,IAAK,GAAI;AACtE,WAAO;AAAA,EACR;AAEA,QAAM,QAAQ;AAAA,IACb,IAAI;AAAA,IACJ,OAAO,IAAI,SAAS;AAAA;AAAA;AAAA,IAGpB,MAAM,SAAS,WAAW,SAAS;AAAA,EACpC;AAGA,MAAK,IAAI,QAAQ,MAAM,QAAS,IAAI,IAAK,GAAI;AAC5C,UAAM,WAAW,IAAI,KAAK,IAAK,CAAE,WAAa;AAAA,MAC7C;AAAA,MACA,OAAO,OAAQ,KAAM;AAAA,IACtB,EAAI;AAAA,EACL;AAEA,SAAO;AACR;", "names": [] }