import { computed, ComputedRef } from 'vue';
import { ScreenSizes, ColPropsBaseClass, screenSizes, colPropsBaseClass } from '../grid-types';
import { useNamespace } from '../../../shared/hooks/use-namespace';
const colNs = useNamespace('col');
export function useColClassNames(props: ColPropsBaseClass): ComputedRef<Record<string, boolean>> {
return computed<Record<string, boolean>>(() => ({
[colNs.em('span', props.span ? String(props.span) : '')]: true,
[colNs.em('offset', props.offset ? String(props.offset) : '')]: true,
[colNs.em('pull', props.pull ? String(props.pull) : '')]: true,
[colNs.em('push', props.push ? String(props.push) : '')]: true,
}));
}
function setSpace(val: string) {
return ` ${val.trim()}${val && ' '}`;
}
export function useSize(colSizes: ScreenSizes): ComputedRef<string> {
const keys = Object.keys(colSizes).filter((key) => key in screenSizes) as (keyof ScreenSizes)[];
return computed<string>(() => {
return keys.reduce((total, key) => {
const valueType = typeof colSizes[key];
if (valueType === 'number') {
total = `${setSpace(total)}${colNs.em(key, `span-${colSizes[key]}`)}`;
} else if (valueType === 'object') {
const colSizesKeys = Object.keys(colSizes[key] as ColPropsBaseClass);
const sum = colSizesKeys
.filter((item) => item in colPropsBaseClass)
.reduce((tot, k) => {
const baseClass = colSizes[key] as ColPropsBaseClass;
const _class = baseClass[k as keyof ColPropsBaseClass];
if (typeof _class !== 'number') {
return '';
} else {
tot = `${setSpace(tot)}${colNs.em(key, `${k}-${_class}`)}`;
}
return tot;
}, '');
total = `${setSpace(total)}${sum}`;
}
return total;
}, '');
});
}