{"version":3,"file":"selection.umd.js","sources":["../src/rowSelection/store.ts","../src/rowSelection/actions.ts","../src/rowSelection/rowSelection.tsx"],"sourcesContent":["import { BaseStore } from 'gridjs';\nimport { RowSelectionActionsType } from './actions';\n\nexport type RowSelectionStoreState = {\n rowIds: string[];\n};\n\nexport class RowSelectionStore extends BaseStore<\n RowSelectionStoreState,\n RowSelectionActionsType\n> {\n getInitialState(): RowSelectionStoreState {\n return { rowIds: [] };\n }\n\n handle(type, payload): void {\n if (type === 'CHECK') {\n const { ROW_ID } = payload;\n this.check(ROW_ID);\n }\n\n if (type === 'UNCHECK') {\n const { ROW_ID } = payload;\n this.uncheck(ROW_ID);\n }\n }\n\n private check(rowId: string): void {\n // rowId already exists\n if (this.state.rowIds.indexOf(rowId) > -1) return;\n\n this.setState({\n rowIds: [rowId, ...this.state.rowIds],\n });\n }\n\n private uncheck(rowId: string): void {\n const index = this.state.rowIds.indexOf(rowId);\n\n // rowId doesn't exist\n if (index === -1) return;\n\n const cloned = [...this.state.rowIds];\n cloned.splice(index, 1);\n\n this.setState({\n rowIds: cloned,\n });\n }\n}\n","import { BaseActions } from 'gridjs';\n\nexport interface RowSelectionActionsType {\n CHECK: {\n ROW_ID: string;\n };\n\n UNCHECK: {\n ROW_ID: string;\n };\n}\n\nexport class RowSelectionActions extends BaseActions<RowSelectionActionsType> {\n check(rowId: string): void {\n this.dispatch('CHECK', {\n ROW_ID: rowId,\n });\n }\n\n uncheck(rowId: string): void {\n this.dispatch('UNCHECK', {\n ROW_ID: rowId,\n });\n }\n}\n","import { h } from 'gridjs';\nimport { RowSelectionStore, RowSelectionStoreState } from './store';\nimport { RowSelectionActions } from './actions';\nimport { className } from 'gridjs';\nimport { Row } from 'gridjs';\nimport { PluginBaseComponent, PluginBaseProps } from 'gridjs';\nimport { Cell } from 'gridjs';\n\ninterface RowSelectionState {\n isChecked: boolean;\n}\n\ninterface RowSelectionProps {\n // row identifier\n id: (row: Row) => string;\n // it's optional because thead doesn't have a row\n row?: Row;\n cell?: Cell;\n store?: RowSelectionStore;\n selectedClassName?: string;\n checkboxClassName?: string;\n}\n\nexport class RowSelection extends PluginBaseComponent<\n RowSelectionProps & PluginBaseProps<RowSelection>,\n RowSelectionState\n> {\n private readonly actions: RowSelectionActions;\n private readonly store: RowSelectionStore;\n private readonly storeUpdatedFn: (...args) => void;\n\n private isDataCell = (props): boolean => props.row !== undefined;\n private getParentTR = (): Element =>\n this.base &&\n this.base.parentElement &&\n (this.base.parentElement.parentElement as Element);\n\n static defaultProps = {\n selectedClassName: className('tr', 'selected'),\n checkboxClassName: className('checkbox'),\n };\n\n constructor(\n props: RowSelectionProps & PluginBaseProps<RowSelection>,\n context,\n ) {\n super(props, context);\n\n this.state = {\n isChecked: false,\n };\n\n // store/dispatcher is required only if we are rendering a TD (not a TH)\n if (this.isDataCell(props)) {\n // create a new store if a global store doesn't exist\n if (!props.store) {\n const store = new RowSelectionStore(this.config.dispatcher);\n this.store = store;\n\n // to reuse for other checkboxes\n props.plugin.props.store = store;\n } else {\n // restore the existing store\n this.store = props.store;\n }\n\n this.actions = new RowSelectionActions(this.config.dispatcher);\n this.storeUpdatedFn = this.storeUpdated.bind(this);\n this.store.on('updated', this.storeUpdatedFn);\n\n // also mark this checkbox as checked if cell.data is true\n if (props.cell.data) {\n this.check();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.store.off('updated', this.storeUpdatedFn);\n }\n\n componentDidMount(): void {\n if (this.store) this.storeUpdated(this.store.state);\n }\n\n private storeUpdated(state: RowSelectionStoreState): void {\n const parent = this.getParentTR();\n\n if (!parent) return;\n\n const isChecked = state.rowIds.indexOf(this.props.id(this.props.row)) > -1;\n\n this.setState({\n isChecked: isChecked,\n });\n\n if (isChecked) {\n parent.classList.add(this.props.selectedClassName);\n } else {\n parent.classList.remove(this.props.selectedClassName);\n }\n }\n\n private check(): void {\n this.actions.check(this.props.id(this.props.row));\n this.props.cell.update(true);\n }\n\n private uncheck(): void {\n this.actions.uncheck(this.props.id(this.props.row));\n this.props.cell.update(false);\n }\n\n private toggle(): void {\n if (this.state.isChecked) {\n this.uncheck();\n } else {\n this.check();\n }\n }\n\n render() {\n if (this.isDataCell(this.props)) {\n return (\n <input\n type={'checkbox'}\n checked={this.state.isChecked}\n onChange={() => this.toggle()}\n className={this.props.checkboxClassName}\n />\n );\n }\n\n return null;\n }\n}\n"],"names":["RowSelectionStore","getInitialState","rowIds","handle","type","payload","this","check","ROW_ID","uncheck","rowId","state","indexOf","setState","index","cloned","splice","BaseStore","RowSelectionActions","dispatch","BaseActions","RowSelection","props","context","_this","actions","store","storeUpdatedFn","isDataCell","undefined","row","getParentTR","base","parentElement","isChecked","config","dispatcher","plugin","storeUpdated","bind","on","cell","data","componentWillUnmount","off","componentDidMount","parent","id","classList","add","selectedClassName","remove","update","toggle","render","checked","onChange","_this2","className","checkboxClassName","PluginBaseComponent","defaultProps"],"mappings":"8gBAOaA,kGAIXC,gBAAA,WACE,MAAO,CAAEC,OAAQ,OAGnBC,OAAA,SAAOC,EAAMC,GACE,UAATD,GAEFE,KAAKC,MADcF,EAAXG,QAIG,YAATJ,GAEFE,KAAKG,QADcJ,EAAXG,WAKJD,MAAA,SAAMG,GAERJ,KAAKK,MAAMT,OAAOU,QAAQF,IAAU,GAExCJ,KAAKO,SAAS,CACZX,QAASQ,UAAUJ,KAAKK,MAAMT,aAI1BO,QAAA,SAAQC,GACd,IAAMI,EAAQR,KAAKK,MAAMT,OAAOU,QAAQF,GAGxC,IAAe,IAAXI,EAAJ,CAEA,IAAMC,YAAaT,KAAKK,MAAMT,QAC9Ba,EAAOC,OAAOF,EAAO,GAErBR,KAAKO,SAAS,CACZX,OAAQa,SAvCyBE,aCK1BC,kGACXX,MAAA,SAAMG,GACJJ,KAAKa,SAAS,QAAS,CACrBX,OAAQE,OAIZD,QAAA,SAAQC,GACNJ,KAAKa,SAAS,UAAW,CACvBX,OAAQE,QAT2BU,eCW5BC,cAmBX,WACEC,EACAC,SASA,IAPAC,cAAMF,EAAOC,UAnBEE,iBACAC,eACAC,wBAETC,WAAa,SAACN,eAAiCO,IAAdP,EAAMQ,OACvCC,YAAc,oBACfC,MACLR,EAAKQ,KAAKC,eACTT,EAAKQ,KAAKC,cAAcA,eAazBT,EAAKb,MAAQ,CACXuB,WAAW,GAITV,EAAKI,WAAWN,GAAQ,CAE1B,GAAKA,EAAMI,MAQTF,EAAKE,MAAQJ,EAAMI,UARH,CAChB,IAAMA,EAAQ,IAAI1B,EAAkBwB,EAAKW,OAAOC,YAChDZ,EAAKE,MAAQA,EAGbJ,EAAMe,OAAOf,MAAMI,MAAQA,EAM7BF,EAAKC,QAAU,IAAIP,EAAoBM,EAAKW,OAAOC,YACnDZ,EAAKG,eAAiBH,EAAKc,aAAaC,mIACxCf,EAAKE,MAAMc,GAAG,UAAWhB,EAAKG,gBAG1BL,EAAMmB,KAAKC,MACblB,EAAKjB,wBAjDb,2BAsDEoC,qBAAA,WACErC,KAAKoB,MAAMkB,IAAI,UAAWtC,KAAKqB,mBAGjCkB,kBAAA,WACMvC,KAAKoB,OAAOpB,KAAKgC,aAAahC,KAAKoB,MAAMf,UAGvC2B,aAAA,SAAa3B,GACnB,IAAMmC,EAASxC,KAAKyB,cAEpB,GAAKe,EAAL,CAEA,IAAMZ,EAAYvB,EAAMT,OAAOU,QAAQN,KAAKgB,MAAMyB,GAAGzC,KAAKgB,MAAMQ,OAAS,EAEzExB,KAAKO,SAAS,CACZqB,UAAWA,IAGTA,EACFY,EAAOE,UAAUC,IAAI3C,KAAKgB,MAAM4B,mBAEhCJ,EAAOE,UAAUG,OAAO7C,KAAKgB,MAAM4B,uBAI/B3C,MAAA,WACND,KAAKmB,QAAQlB,MAAMD,KAAKgB,MAAMyB,GAAGzC,KAAKgB,MAAMQ,MAC5CxB,KAAKgB,MAAMmB,KAAKW,QAAO,MAGjB3C,QAAA,WACNH,KAAKmB,QAAQhB,QAAQH,KAAKgB,MAAMyB,GAAGzC,KAAKgB,MAAMQ,MAC9CxB,KAAKgB,MAAMmB,KAAKW,QAAO,MAGjBC,OAAA,WACF/C,KAAKK,MAAMuB,UACb5B,KAAKG,UAELH,KAAKC,WAIT+C,OAAA,sBACE,OAAIhD,KAAKsB,WAAWtB,KAAKgB,oBAGnBlB,KAAM,WACNmD,QAASjD,KAAKK,MAAMuB,UACpBsB,SAAU,kBAAMC,EAAKJ,UACrBK,UAAWpD,KAAKgB,MAAMqC,6BAzGEC,uBAArBvC,EAcJwC,aAAe,CACpBX,kBAAmBQ,YAAU,KAAM,YACnCC,kBAAmBD,YAAU"}