vuecssuiant-designantdreactantantd-vueenterprisefrontendui-designvue-antdvue-antd-uivue3vuecomponent
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.1 KiB
40 lines
1.1 KiB
import type { |
|
ColumnType, |
|
DefaultRecordType, |
|
ColumnsType, |
|
TableLayout, |
|
RenderExpandIcon, |
|
ExpandableType, |
|
RowClassName, |
|
TriggerEventHandler, |
|
ExpandedRowRender, |
|
} from '../interface'; |
|
import type { InjectionKey } from 'vue'; |
|
import { inject, provide } from 'vue'; |
|
|
|
export interface BodyContextProps<RecordType = DefaultRecordType> { |
|
rowClassName: string | RowClassName<RecordType>; |
|
expandedRowClassName: RowClassName<RecordType>; |
|
|
|
columns: ColumnsType<RecordType>; |
|
flattenColumns: readonly ColumnType<RecordType>[]; |
|
|
|
tableLayout: TableLayout; |
|
|
|
indentSize: number; |
|
expandableType: ExpandableType; |
|
expandRowByClick: boolean; |
|
expandedRowRender: ExpandedRowRender<RecordType>; |
|
expandIcon: RenderExpandIcon<RecordType>; |
|
onTriggerExpand: TriggerEventHandler<RecordType>; |
|
expandIconColumnIndex: number; |
|
} |
|
export const BodyContextKey: InjectionKey<BodyContextProps> = Symbol('BodyContextProps'); |
|
|
|
export const useProvideBody = (props: BodyContextProps) => { |
|
provide(BodyContextKey, props); |
|
}; |
|
|
|
export const useInjectBody = () => { |
|
return inject(BodyContextKey, {} as BodyContextProps); |
|
};
|
|
|