@arco-design/web-vue
Version:
Arco Design Vue 2.0: A Vue.js 3 UI Library
104 lines (103 loc) • 3.06 kB
JavaScript
"use strict";
var vue = require("vue");
var globalConfig = require("../_utils/global-config.js");
var context = require("./context.js");
var useResponsiveState = require("./hook/use-responsive-state.js");
var index = require("./utils/index.js");
var pluginVue_exportHelper = require("../_virtual/plugin-vue_export-helper.js");
const _sfc_main = vue.defineComponent({
name: "Grid",
props: {
cols: {
type: [Number, Object],
default: 24
},
rowGap: {
type: [Number, Object],
default: 0
},
colGap: {
type: [Number, Object],
default: 0
},
collapsed: {
type: Boolean,
default: false
},
collapsedRows: {
type: Number,
default: 1
}
},
setup(props) {
const {
cols: propCols,
rowGap: propRowGap,
colGap: propColGap,
collapsedRows,
collapsed
} = vue.toRefs(props);
const cols = useResponsiveState.useResponsiveState(propCols, 24);
const colGap = useResponsiveState.useResponsiveState(propColGap, 0);
const rowGap = useResponsiveState.useResponsiveState(propRowGap, 0);
const prefixCls = globalConfig.getPrefixCls("grid");
const classNames = vue.computed(() => [prefixCls]);
const style = vue.computed(() => [
{
"gap": `${rowGap.value}px ${colGap.value}px`,
"grid-template-columns": `repeat(${cols.value}, minmax(0px, 1fr))`
}
]);
const itemDataMap = vue.reactive(/* @__PURE__ */ new Map());
const itemDataList = vue.computed(() => {
const list = [];
for (const [index2, itemData] of itemDataMap.entries()) {
list[index2] = itemData;
}
return list;
});
const gridContext = vue.reactive({
overflow: false,
displayIndexList: [],
cols: cols.value,
colGap: colGap.value
});
vue.watchEffect(() => {
gridContext.cols = cols.value;
gridContext.colGap = colGap.value;
});
vue.watchEffect(() => {
const displayInfo = index.setItemVisible({
cols: cols.value,
collapsed: collapsed.value,
collapsedRows: collapsedRows.value,
itemDataList: itemDataList.value
});
gridContext.overflow = displayInfo.overflow;
gridContext.displayIndexList = displayInfo.displayIndexList;
});
vue.provide(context.GridContextInjectionKey, gridContext);
vue.provide(context.GridDataCollectorInjectionKey, {
collectItemData(index2, itemData) {
itemDataMap.set(index2, itemData);
},
removeItemData(index2) {
itemDataMap.delete(index2);
}
});
return {
classNames,
style
};
}
});
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("div", {
class: vue.normalizeClass(_ctx.classNames),
style: vue.normalizeStyle(_ctx.style)
}, [
vue.renderSlot(_ctx.$slots, "default")
], 6);
}
var _Grid = /* @__PURE__ */ pluginVue_exportHelper(_sfc_main, [["render", _sfc_render]]);
module.exports = _Grid;