Added editor component

For every component provided access to "root"
Added config to sheet component
This commit is contained in:
Eugene 2023-07-19 18:10:21 +03:00
parent 179d775b88
commit 9f44e2e9e5
9 changed files with 111 additions and 14 deletions

18
src/components/editor.ts Normal file
View File

@ -0,0 +1,18 @@
import { Spreadsheet } from "../main";
export class Editor {
element: HTMLInputElement
root: Spreadsheet
constructor(root: Spreadsheet) {
this.root = root
const element = document.createElement('input')
this.element = element
}
hide() {
this.element.style.display = 'hidden'
}
show() {
this.element.style.display = 'block'
}
}

View File

@ -1,7 +1,12 @@
import { Spreadsheet } from "../main"
export class Header { export class Header {
element: HTMLHeadElement element: HTMLHeadElement
constructor() { root: Spreadsheet
constructor(root: Spreadsheet) {
this.root = root
const headerElement = document.createElement('header') const headerElement = document.createElement('header')
headerElement.classList.add()
this.element = headerElement this.element = headerElement
} }
} }

View File

@ -1,7 +1,12 @@
import { Spreadsheet } from "../main"
export class Scroller { export class Scroller {
element: HTMLDivElement element: HTMLDivElement
constructor() { root: Spreadsheet
constructor(root: Spreadsheet) {
this.root = root
const scroller = document.createElement('div') const scroller = document.createElement('div')
scroller.classList.add(this.root.cssPrefix + 'scroller')
this.element = scroller this.element = scroller
} }
} }

View File

@ -1,11 +1,34 @@
import { Spreadsheet } from "../main"
import { Column } from "../modules/column"
import { Row } from "../modules/row"
export type SheetConfigConstructorProps = {
rows: Row[]
columns: Column[]
}
export class SheetConfig {
rows: Row[]
columns: Column[]
constructor(props: SheetConfigConstructorProps) {
this.rows = props.rows
this.columns = props.columns
}
}
/** /**
* Display (CANVAS) element where cells render * Display (CANVAS) element where cells render
*/ */
export class Sheet { export class Sheet {
element: HTMLCanvasElement element: HTMLCanvasElement
constructor() { config: SheetConfig
root: Spreadsheet
constructor(root: Spreadsheet, sheetConfig: SheetConfig) {
this.root = root
const canvas = document.createElement('canvas') const canvas = document.createElement('canvas')
canvas.classList.add(this.root.cssPrefix + 'sheet')
this.element = canvas this.element = canvas
this.config = new SheetConfig(sheetConfig)
} }
} }

View File

@ -1,8 +1,13 @@
import { Spreadsheet } from "../main"
/** Base (root) component */ /** Base (root) component */
export class Table { export class Table {
element: HTMLDivElement element: HTMLDivElement
constructor() { root: Spreadsheet
constructor(root: Spreadsheet) {
this.root = root
const container = document.createElement('div') const container = document.createElement('div')
container.classList.add(this.root.cssPrefix + 'spreadsheet_container')
this.element = container this.element = container
} }
} }

View File

@ -1,7 +1,12 @@
import { Spreadsheet } from "../main"
export class Toolbar { export class Toolbar {
element: HTMLDivElement element: HTMLDivElement
constructor() { root: Spreadsheet
constructor(root: Spreadsheet) {
this.root = root
const toolbarElement = document.createElement('div') const toolbarElement = document.createElement('div')
toolbarElement.classList.add(this.root.cssPrefix + 'toolbar')
this.element = toolbarElement this.element = toolbarElement
} }
} }

View File

@ -1,9 +1,10 @@
import { Editor } from "./components/editor";
import { Header } from "./components/header"; import { Header } from "./components/header";
import { Scroller } from "./components/scroller"; import { Scroller } from "./components/scroller";
import { Sheet } from "./components/sheet"; import { Sheet } from "./components/sheet";
import { Table } from "./components/table"; import { Table } from "./components/table";
import { Toolbar } from "./components/toolbar"; import { Toolbar } from "./components/toolbar";
import { Viewport } from "./components/viewport"; // import { Viewport } from "./components/viewport";
import { Config, ConfigProperties } from "./modules/config"; import { Config, ConfigProperties } from "./modules/config";
import { Styles } from "./modules/styles"; import { Styles } from "./modules/styles";
@ -25,6 +26,7 @@ export class Spreadsheet {
private toolbar: Toolbar private toolbar: Toolbar
private header: Header private header: Header
private sheet: Sheet private sheet: Sheet
private editor: Editor
// private viewport: Viewport // private viewport: Viewport
public styles: Styles public styles: Styles
private config: Config private config: Config
@ -34,14 +36,19 @@ export class Spreadsheet {
} }
constructor(target: string | HTMLElement, config?: ConfigProperties) { constructor(target: string | HTMLElement, config?: ConfigProperties) {
this.table = new Table()
this.scroller = new Scroller()
this.toolbar = new Toolbar()
this.header = new Header()
this.sheet = new Sheet()
// this.viewport = new Viewport()
this.styles = new Styles()
this.config = new Config(config) this.config = new Config(config)
this.styles = new Styles()
this.table = new Table(this)
this.scroller = new Scroller(this)
this.toolbar = new Toolbar(this)
this.header = new Header(this)
this.sheet = new Sheet(this, {
columns: [],
rows: []
})
this.editor = new Editor(this)
// this.viewport = new Viewport()
this.buildComponent() this.buildComponent()
this.appendTableToTarget(target) this.appendTableToTarget(target)
@ -49,12 +56,14 @@ export class Spreadsheet {
private buildComponent(): void { private buildComponent(): void {
const content = document.createElement('div') //* Abstract const content = document.createElement('div') //* Abstract
content.classList.add(this.cssPrefix + 'content')
content.appendChild(this.header.element) content.appendChild(this.header.element)
content.appendChild(this.sheet.element) content.appendChild(this.sheet.element)
this.table.element.appendChild(this.toolbar.element) this.table.element.appendChild(this.toolbar.element)
this.table.element.appendChild(content) this.table.element.appendChild(content)
this.table.element.appendChild(this.scroller.element) this.table.element.appendChild(this.scroller.element)
this.table.element.append(this.editor.element)
} }
private appendTableToTarget(target: string | HTMLElement) { private appendTableToTarget(target: string | HTMLElement) {

14
src/modules/column.ts Normal file
View File

@ -0,0 +1,14 @@
export type ColumnConstructorProperties = {
width: number
title: string
}
export class Column {
width: number
title: string
constructor(props: ColumnConstructorProperties) {
this.width = props.width
this.title = props.title
}
}

13
src/modules/row.ts Normal file
View File

@ -0,0 +1,13 @@
export type RowConstructorProps = {
height: number
title: string
}
export class Row {
height: number
title: string
constructor(props: RowConstructorProps) {
this.height = props.height
this.title = props.title
}
}