1- import {
2- DatabaseHeaderProps ,
3- TableColumn ,
4- TableDataType ,
5- } from "cdm/FolderModel" ;
1+ import { DatabaseHeaderProps } from "cdm/FolderModel" ;
62import { ActionTypes , DataTypes , StyleVariables } from "helpers/Constants" ;
73import { dbTrim , c } from "helpers/StylesHelper" ;
84import ArrowUpIcon from "components/img/ArrowUp" ;
@@ -13,13 +9,15 @@ import TrashIcon from "components/img/Trash";
139import TextIcon from "components/img/Text" ;
1410import MultiIcon from "components/img/Multi" ;
1511import HashIcon from "components/img/Hash" ;
12+ import CalendarIcon from "components/img/CalendarIcon" ;
1613import AdjustmentsIcon from "components/img/AdjustmentsIcon" ;
1714import React , { useContext , useEffect , useState } from "react" ;
18- import { ActionType , Column } from "react-table" ;
15+ import { Column } from "react-table" ;
1916import { usePopper } from "react-popper" ;
2017import { HeaderContext } from "components/contexts/HeaderContext" ;
18+ import { getColumnWidthStyle } from "components/styles/ColumnWidthStyle" ;
2119import { FormControlLabel , FormGroup , Switch } from "@material-ui/core" ;
22- import { getColumnWidthStyle } from "./styles/ColumnWidthStyle" ;
20+
2321type HeaderMenuProps = {
2422 headerProps : DatabaseHeaderProps ;
2523 setSortBy : any ;
@@ -140,7 +138,12 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
140138 icon : < ArrowRightIcon /> ,
141139 label : "Insert right" ,
142140 } ,
143- {
141+ ] ;
142+ /**
143+ * Add extra buttons if column is not a metadata
144+ */
145+ if ( ! column . isMetadata ) {
146+ buttons . push ( {
144147 onClick : ( e : any ) => {
145148 dispatch ( {
146149 type : ActionTypes . DELETE_COLUMN ,
@@ -153,9 +156,8 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
153156 } ,
154157 icon : < TrashIcon /> ,
155158 label : "Delete" ,
156- } ,
157- ] ;
158-
159+ } ) ;
160+ }
159161 /**
160162 * Array of type headers available to change the data type of the column
161163 */
@@ -199,6 +201,19 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
199201 icon : < HashIcon /> ,
200202 label : DataTypes . NUMBER ,
201203 } ,
204+ {
205+ onClick : ( e : any ) => {
206+ dispatch ( {
207+ type : ActionTypes . UPDATE_COLUMN_TYPE ,
208+ columnId : column . id ,
209+ dataType : DataTypes . CALENDAR ,
210+ } ) ;
211+ setShowType ( false ) ;
212+ setExpanded ( false ) ;
213+ } ,
214+ icon : < CalendarIcon /> ,
215+ label : DataTypes . CALENDAR ,
216+ } ,
202217 ] ;
203218
204219 const typePopper = usePopper ( typeReferenceElement , typePopperElement , {
@@ -315,84 +330,89 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
315330 } }
316331 >
317332 { /** Edit header label section */ }
318- < div
319- style = { {
320- paddingTop : "0.75rem" ,
321- paddingLeft : "0.75rem" ,
322- paddingRight : "0.75rem" ,
323- } }
324- >
325- < div className = "is-fullwidth" style = { { marginBottom : 12 } } >
326- < input
327- className = {
328- labelStateInvalid
329- ? `${ c ( "invalid-form" ) } `
330- : `${ c ( "form-input" ) } `
331- }
332- ref = { setInputRef }
333- type = "text"
334- value = { labelState }
335- style = { { width : "100%" } }
336- onChange = { handleChange }
337- onBlur = { handleBlur }
338- onKeyDown = { handleKeyDown }
339- />
340- </ div >
341- < span
342- className = "font-weight-600 font-size-75"
343- style = { {
344- textTransform : "uppercase" ,
345- color : StyleVariables . TEXT_FAINT ,
346- } }
347- >
348- Property Type
349- </ span >
350- </ div >
351- { /** Type of column section */ }
352- < div style = { { padding : "4px 0px" } } >
353- < div
354- className = "menu-item sort-button"
355- onMouseEnter = { ( ) => setShowType ( true ) }
356- onMouseLeave = { ( ) => setShowType ( false ) }
357- ref = { setTypeReferenceElement }
358- >
359- < span className = "svg-icon svg-text icon-margin" >
360- { propertyIcon }
361- </ span >
362- < span style = { { textTransform : "capitalize" } } >
363- { column . dataType }
364- </ span >
365- </ div >
366- { showType && (
333+ { ! column . isMetadata && (
334+ < >
367335 < div
368- className = { `menu ${ c ( "popper" ) } ` }
369- ref = { setTypePopperElement }
370- onMouseEnter = { ( ) => setShowType ( true ) }
371- onMouseLeave = { ( ) => setShowType ( false ) }
372- { ...typePopper . attributes . popper }
373336 style = { {
374- ...typePopper . styles . popper ,
375- width : 200 ,
376- zIndex : 4 ,
377- padding : "4px 0px" ,
337+ paddingTop : "0.75rem" ,
338+ paddingLeft : "0.75rem" ,
339+ paddingRight : "0.75rem" ,
378340 } }
379341 >
380- { types . map ( ( type ) => (
381- < div key = { type . label } >
382- < div
383- className = "menu-item sort-button"
384- onClick = { type . onClick }
385- >
386- < span className = "svg-icon svg-text icon-margin" >
387- { type . icon }
388- </ span >
389- { type . label }
390- </ div >
342+ < div className = "is-fullwidth" style = { { marginBottom : 12 } } >
343+ < input
344+ className = {
345+ labelStateInvalid
346+ ? `${ c ( "invalid-form" ) } `
347+ : `${ c ( "form-input" ) } `
348+ }
349+ ref = { setInputRef }
350+ type = "text"
351+ value = { labelState }
352+ style = { { width : "100%" } }
353+ onChange = { handleChange }
354+ onBlur = { handleBlur }
355+ onKeyDown = { handleKeyDown }
356+ />
357+ </ div >
358+
359+ < span
360+ className = "font-weight-600 font-size-75"
361+ style = { {
362+ textTransform : "uppercase" ,
363+ color : StyleVariables . TEXT_FAINT ,
364+ } }
365+ >
366+ Property Type
367+ </ span >
368+ </ div >
369+ { /** Type of column section */ }
370+ < div style = { { padding : "4px 0px" } } >
371+ < div
372+ className = "menu-item sort-button"
373+ onMouseEnter = { ( ) => setShowType ( true ) }
374+ onMouseLeave = { ( ) => setShowType ( false ) }
375+ ref = { setTypeReferenceElement }
376+ >
377+ < span className = "svg-icon svg-text icon-margin" >
378+ { propertyIcon }
379+ </ span >
380+ < span style = { { textTransform : "capitalize" } } >
381+ { column . dataType }
382+ </ span >
383+ </ div >
384+ { showType && (
385+ < div
386+ className = { `menu ${ c ( "popper" ) } ` }
387+ ref = { setTypePopperElement }
388+ onMouseEnter = { ( ) => setShowType ( true ) }
389+ onMouseLeave = { ( ) => setShowType ( false ) }
390+ { ...typePopper . attributes . popper }
391+ style = { {
392+ ...typePopper . styles . popper ,
393+ width : 200 ,
394+ zIndex : 4 ,
395+ padding : "4px 0px" ,
396+ } }
397+ >
398+ { types . map ( ( type ) => (
399+ < div key = { type . label } >
400+ < div
401+ className = "menu-item sort-button"
402+ onClick = { type . onClick }
403+ >
404+ < span className = "svg-icon svg-text icon-margin" >
405+ { type . icon }
406+ </ span >
407+ { type . label }
408+ </ div >
409+ </ div >
410+ ) ) }
391411 </ div >
392- ) ) }
412+ ) }
393413 </ div >
394- ) }
395- </ div >
414+ </ >
415+ ) }
396416 { /** Action buttons section */ }
397417 < div
398418 style = { {
0 commit comments