sanity-plugin-icon-picker-fix
Version:
An Icon Picker plugin for Sanity
71 lines (60 loc) • 1.7 kB
text/typescript
import CONFIGURATIONS from '../configurations';
import { getSupportedProviders } from './helpers';
import type {
ConfigurationIconObject,
IconObject,
IconObjectArray,
IconPickerOptions,
} from '../types';
function getFiltered(icons: IconObjectArray, options: IconPickerOptions) {
const filter = options.filter || [];
if (!filter.length) return icons;
const filtered = icons.filter(({ tags }) => {
return filter.some((f = '') => {
return tags.some((t) => {
if (typeof f === 'object') return f.test(t);
return f.toLowerCase() === t.toLowerCase();
});
});
});
return filtered;
}
export function getIcons(options: IconPickerOptions = {}): IconObjectArray {
const supportedProviders = getSupportedProviders(options);
let icons: IconObjectArray = [];
const addIconProvider =
(provider: string) =>
(icon: ConfigurationIconObject): IconObject => {
return {
...icon,
provider,
};
};
if (supportedProviders) {
CONFIGURATIONS.filter((config) =>
supportedProviders.includes(config.provider)
).forEach((config) => {
icons = [
...icons,
...config.icons(options).map(addIconProvider(config.provider)),
];
});
}
if (options.configurations) {
options.configurations.forEach((config) => {
icons = [
...icons,
...config.icons(options).map(addIconProvider(config.provider)),
];
});
}
if (!icons.length) {
CONFIGURATIONS.forEach((config) => {
icons = [
...icons,
...config.icons(options).map(addIconProvider(config.provider)),
];
});
}
return getFiltered(icons, options);
}