[]
SpreadJS 디자이너 컴포넌트의 도킹 가능한 사이드 패널은 사용자 경험과 작업 효율성을 크게 향상시킵니다. 사용자는 개인 선호나 작업 흐름에 맞춰 패널 위치를 유연하게 조정할 수 있어 화면 공간을 최적화하면서 디자인 뷰포트를 가리지 않게 유지할 수 있습니다. 또한 자주 사용하는 기능에 빠르게 접근할 수 있습니다.
사이드 패널의 제목 표시줄을 클릭하고 드래그하면 패널이 드래그 모드로 전환됩니다. 패널 중앙에는 위치 표시기가 나타나며, 미리보기 오버레이는 도킹 가능한 위치를 보여줍니다.
위치 표시기 사용: 패널을 위치 표시기 위로 드래그한 뒤 지정된 위치에 도킹합니다.
오버레이 사용: 패널을 원하는 위치 근처로 드래그하면, 미리보기 오버레이가 목표 위치를 보여줍니다. 이때 놓으면 해당 위치에 도킹됩니다.
참고:
사이드 패널만 드래그 앤 드롭 기능을 지원하며, 왼쪽/오른쪽으로만 이동할 수 있고 상단/하단으로는 이동 불가합니다.
여러 개의 사이드 패널이 동시에 표시되면 탭으로 정리할 수 있습니다.
기본 탭 동작:
같은 측면에 여러 패널이 표시되면 기본적으로 자동으로 탭으로 나타납니다.
병렬 표시 옵션:
설정 파일을 통해 패널을 탭 대신 나란히(side-by-side) 표시하도록 구성할 수 있습니다.
드래그 앤 드롭으로 탭 그룹화:
패널을 다른 패널의 도킹 힌트 버튼 위로 드래그
목표 패널의 탭 영역이 강조될 때 놓기
→ 드래그한 패널이 목표 패널의 탭 그룹에 추가됩니다.
export interface ISidePanel {
/* ... */
canStack?: boolean; // 기본값 true
}
canStack
을 false로 설정하면:
사이드 패널이 다른 패널과 나란히 표시됨
탭 그룹화 기능 비활성화
이전 구현과의 호환성 유지
예시:
const config = GC.Spread.Sheets.Designer.DefaultConfig;
config.sidePanels.forEach(panel => {
panel.canStack = false;
});
const designer = new GC.Spread.Sheets.Designer.Designer('gc-designer-container', config);
사용자 정의 패널에서도 드래그 앤 드롭 기능을 사용하려면, 패널 템플릿에 PanelTitle
컴포넌트를 포함해야 합니다.
PanelTitle
은 드래그 핸들 역할을 하여 제목 영역을 드래그할 수 있게 합니다.
interface IPanelTitleOption extends GC.Spread.Sheets.Designer.ITextBlockOption {
type: "PanelTitle"
}
참고: 드래그 가능 동작은 패널 위치가
left
또는right
일 때만 적용됩니다.
예시:
const config = GC.Spread.Sheets.Designer.DefaultConfig;
const customPanel = {
command: "customPanel",
position: "right",
uiTemplate: "customPanelTemplate",
width: "300px"
};
const customPanelCommand = {
commandName: "customPanel",
execute: () => {},
getState: () => {}
};
const customPanelTemplate = {
templateName: "customPanelTemplate",
content: [
{
type: "Column",
children: [
{
type: "PanelTitle", // 드래그 핸들
text: "Custom Panel",
margin: "10px"
},
{
type: "TextBlock",
text: "This is a custom side panel.",
margin: "10px"
}
]
}
]
}
GC.Spread.Sheets.Designer.registerTemplate("customPanelTemplate", customPanelTemplate);
config.sidePanels.push(customPanel);
config.commandMap = {
customPanel: customPanelCommand
};
designer.setConfig(config);
사용자 정의 명령 로직을 정의하면, 사이드 패널이 사용자 행동이나 비즈니스 시나리오에 맞춰 동적으로 반응하도록 커스터마이징할 수 있습니다.