UNPKG

strapi-plugin-icons-field

Version:

A customizable plugin for Strapi to integrate an icon field into your content types.

1 lines 5.2 kB
{"version":3,"file":"index.mjs","sources":["../../server/src/register.ts","../../server/src/controllers/icon-selector.ts","../../server/src/controllers/index.ts","../../server/src/routes/admin-api.ts","../../server/src/routes/index.ts","../../server/src/index.ts"],"sourcesContent":["\n\nimport type { Core } from '@strapi/strapi';\n\nconst register = ({ strapi }: { strapi: Core.Strapi }) => {\n strapi.customFields.register({\n name: 'icon',\n plugin: 'icons-field',\n type: 'text',\n });\n};\n\nexport default register;\n","import fs from 'fs';\nimport path from 'path';\n\ntype IconType = {\n name: string\n svg: string\n};\n\ntype FolderIcons = {\n folder: string\n icons: IconType[]\n};\n\nfunction getSvgIconsFromDir(dirPath: string): IconType[] {\n return fs.readdirSync(dirPath)\n .filter(file => file.endsWith('.svg'))\n .map(file => ({\n name: path.basename(file, '.svg'),\n svg: fs.readFileSync(path.join(dirPath, file), 'utf8'),\n }));\n}\n\nexport default ({ strapi }) => ({\n async getIcons(ctx) {\n const subDir = strapi.config.get('plugin.icons-field.publicPath', 'icons');\n const publicDir = path.join(strapi.dirs.static.public, subDir);\n const selection = ctx?.query?.selection;\n let result = [];\n try {\n if (selection) {\n let selections = [];\n if (Array.isArray(selection)) {\n selections = selection;\n } else if (typeof selection === 'string') {\n selections = selection.split(',').map(s => s.trim()).filter(Boolean);\n }\n for (const sel of selections) {\n const folderPath = path.join(publicDir, sel);\n if (fs.existsSync(folderPath) && fs.statSync(folderPath).isDirectory()) {\n const icons = getSvgIconsFromDir(folderPath);\n if (icons.length) {\n result.push({ folder: sel, icons });\n }\n }\n }\n } else {\n const rootIcons = getSvgIconsFromDir(publicDir);\n if (rootIcons.length) {\n result.push({ folder: 'global', icons: rootIcons });\n }\n const folders = fs.readdirSync(publicDir)\n .filter(file => fs.statSync(path.join(publicDir, file)).isDirectory())\n .sort((a, b) => a.localeCompare(b, 'fr'));\n for (const folder of folders) {\n const folderPath = path.join(publicDir, folder);\n const icons = getSvgIconsFromDir(folderPath);\n if (icons.length) {\n result.push({ folder, icons });\n }\n }\n }\n } catch (err) {\n console.error(err);\n }\n ctx.body = result;\n },\n});","import iconSelector from \"./icon-selector\";\n\nexport default {\n iconSelector,\n};\n","export default [\n {\n method: \"GET\",\n path: \"/icons\",\n handler: \"iconSelector.getIcons\",\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n]","import adminAPIRoutes from './admin-api';\n\nconst routes = {\n admin: {\n type: \"admin\",\n routes: adminAPIRoutes,\n },\n};\n\nexport default routes;\n","/**\n * Application methods\n */\nimport register from './register';\n\n/**\n * Plugin server methods\n */\n\nimport controllers from './controllers';\nimport routes from './routes';\n\nexport default {\n register,\n controllers,\n routes\n};\n"],"names":[],"mappings":";;AAIA,MAAM,WAAW,CAAC,EAAE,aAAsC;AACxD,SAAO,aAAa,SAAS;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA,CACP;AACH;ACGA,SAAS,mBAAmB,SAA6B;AACvD,SAAO,GAAG,YAAY,OAAO,EAC1B,OAAO,CAAA,SAAQ,KAAK,SAAS,MAAM,CAAC,EACpC,IAAI,CAAA,UAAS;AAAA,IACZ,MAAM,KAAK,SAAS,MAAM,MAAM;AAAA,IAChC,KAAK,GAAG,aAAa,KAAK,KAAK,SAAS,IAAI,GAAG,MAAM;AAAA,EAAA,EACrD;AACN;AAEA,MAAA,eAAe,CAAC,EAAE,OAAA,OAAc;AAAA,EAC9B,MAAM,SAAS,KAAK;AAClB,UAAM,SAAS,OAAO,OAAO,IAAI,iCAAiC,OAAO;AACzE,UAAM,YAAY,KAAK,KAAK,OAAO,KAAK,OAAO,QAAQ,MAAM;AAC7D,UAAM,YAAY,KAAK,OAAO;AAC9B,QAAI,SAAS,CAAA;AACb,QAAI;AACF,UAAI,WAAW;AACb,YAAI,aAAa,CAAA;AACjB,YAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,uBAAa;AAAA,QACf,WAAW,OAAO,cAAc,UAAU;AACxC,uBAAa,UAAU,MAAM,GAAG,EAAE,IAAI,CAAA,MAAK,EAAE,KAAA,CAAM,EAAE,OAAO,OAAO;AAAA,QACrE;AACA,mBAAW,OAAO,YAAY;AAC5B,gBAAM,aAAa,KAAK,KAAK,WAAW,GAAG;AAC3C,cAAI,GAAG,WAAW,UAAU,KAAK,GAAG,SAAS,UAAU,EAAE,eAAe;AACtE,kBAAM,QAAQ,mBAAmB,UAAU;AAC3C,gBAAI,MAAM,QAAQ;AAChB,qBAAO,KAAK,EAAE,QAAQ,KAAK,OAAO;AAAA,YACpC;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,YAAY,mBAAmB,SAAS;AAC9C,YAAI,UAAU,QAAQ;AACpB,iBAAO,KAAK,EAAE,QAAQ,UAAU,OAAO,WAAW;AAAA,QACpD;AACA,cAAM,UAAU,GAAG,YAAY,SAAS,EACrC,OAAO,CAAA,SAAQ,GAAG,SAAS,KAAK,KAAK,WAAW,IAAI,CAAC,EAAE,aAAa,EACpE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;AAC1C,mBAAW,UAAU,SAAS;AAC5B,gBAAM,aAAa,KAAK,KAAK,WAAW,MAAM;AAC9C,gBAAM,QAAQ,mBAAmB,UAAU;AAC3C,cAAI,MAAM,QAAQ;AAChB,mBAAO,KAAK,EAAE,QAAQ,MAAA,CAAO;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,GAAG;AAAA,IACnB;AACA,QAAI,OAAO;AAAA,EACb;AACF;AChEA,MAAA,cAAe;AAAA,EACb;AACF;ACJA,MAAA,iBAAe;AAAA,EACX;AAAA,IACI,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,MACJ,UAAU,CAAC,6BAA6B;AAAA,IAAA;AAAA,EAC5C;AAER;ACPA,MAAM,SAAS;AAAA,EACb,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAEZ;ACKA,MAAA,QAAe;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF;"}