|
|
|
@@ -10,6 +10,7 @@ import type { DataSourceNotionPage, DataSourceNotionPageMap } from '@/models/com |
|
|
|
|
|
|
|
type PageSelectorProps = { |
|
|
|
value: Set<string> |
|
|
|
disabledValue: Set<string> |
|
|
|
searchValue: string |
|
|
|
pagesMap: DataSourceNotionPageMap |
|
|
|
list: DataSourceNotionPage[] |
|
|
|
@@ -71,6 +72,7 @@ const ItemComponent = ({ index, style, data }: ListChildComponentProps<{ |
|
|
|
dataList: NotionPageItem[] |
|
|
|
handleToggle: (index: number) => void |
|
|
|
checkedIds: Set<string> |
|
|
|
disabledCheckedIds: Set<string> |
|
|
|
handleCheck: (index: number) => void |
|
|
|
canPreview?: boolean |
|
|
|
handlePreview: (index: number) => void |
|
|
|
@@ -80,12 +82,13 @@ const ItemComponent = ({ index, style, data }: ListChildComponentProps<{ |
|
|
|
pagesMap: DataSourceNotionPageMap |
|
|
|
}>) => { |
|
|
|
const { t } = useTranslation() |
|
|
|
const { dataList, handleToggle, checkedIds, handleCheck, canPreview, handlePreview, listMapWithChildrenAndDescendants, searchValue, previewPageId, pagesMap } = data |
|
|
|
const { dataList, handleToggle, checkedIds, disabledCheckedIds, handleCheck, canPreview, handlePreview, listMapWithChildrenAndDescendants, searchValue, previewPageId, pagesMap } = data |
|
|
|
const current = dataList[index] |
|
|
|
const currentWithChildrenAndDescendants = listMapWithChildrenAndDescendants[current.page_id] |
|
|
|
const hasChild = currentWithChildrenAndDescendants.descendants.size > 0 |
|
|
|
const ancestors = currentWithChildrenAndDescendants.ancestors |
|
|
|
const breadCrumbs = ancestors.length ? [...ancestors, current.page_name] : [current.page_name] |
|
|
|
const disabled = disabledCheckedIds.has(current.page_id) |
|
|
|
|
|
|
|
const renderArrow = () => { |
|
|
|
if (hasChild) { |
|
|
|
@@ -113,9 +116,17 @@ const ItemComponent = ({ index, style, data }: ListChildComponentProps<{ |
|
|
|
style={{ ...style, top: style.top as number + 8, left: 8, right: 8, width: 'calc(100% - 16px)' }} |
|
|
|
> |
|
|
|
<Checkbox |
|
|
|
className='shrink-0 mr-2 group-hover:border-primary-600 group-hover:border-[2px]' |
|
|
|
className={cn( |
|
|
|
'shrink-0 mr-2 group-hover:border-primary-600 group-hover:border-[2px]', |
|
|
|
disabled && 'group-hover:border-transparent', |
|
|
|
)} |
|
|
|
checked={checkedIds.has(current.page_id)} |
|
|
|
onCheck={() => handleCheck(index)} |
|
|
|
disabled={disabled} |
|
|
|
onCheck={() => { |
|
|
|
if (disabled) |
|
|
|
return |
|
|
|
handleCheck(index) |
|
|
|
}} |
|
|
|
/> |
|
|
|
{!searchValue && renderArrow()} |
|
|
|
<NotionIcon |
|
|
|
@@ -155,6 +166,7 @@ const Item = memo(ItemComponent, areEqual) |
|
|
|
|
|
|
|
const PageSelector = ({ |
|
|
|
value, |
|
|
|
disabledValue, |
|
|
|
searchValue, |
|
|
|
pagesMap, |
|
|
|
list, |
|
|
|
@@ -284,6 +296,7 @@ const PageSelector = ({ |
|
|
|
dataList: currentDataList, |
|
|
|
handleToggle, |
|
|
|
checkedIds: value, |
|
|
|
disabledCheckedIds: disabledValue, |
|
|
|
handleCheck, |
|
|
|
canPreview, |
|
|
|
handlePreview, |