Added ability to handle collection type schemas
This commit is contained in:
		
							parent
							
								
									31a5887b7b
								
							
						
					
					
						commit
						598f3bd0a0
					
				
							
								
								
									
										47
									
								
								src/components/FlameLinkCollection.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								src/components/FlameLinkCollection.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					import React, { Component} from 'react';
 | 
				
			||||||
 | 
					import flamelinkApp from '../flamelink.js';
 | 
				
			||||||
 | 
					import FlameLinkCollectionComponentCreations from './FlameLinkCollectionComponentCreations';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FlameLinkCollection extends Component {
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        global.mediaID = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.state = {
 | 
				
			||||||
 | 
					          schemaContent: '',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        flamelinkApp.content.get(global.schemaName)
 | 
				
			||||||
 | 
					        .then(result => this.setState({
 | 
				
			||||||
 | 
					          schemaContent: result
 | 
				
			||||||
 | 
					        }))
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getCollectionContent(schemaData){
 | 
				
			||||||
 | 
					        var arr2 = [];
 | 
				
			||||||
 | 
					        var collectionInfo = [schemaData, this.state.schemaContent];
 | 
				
			||||||
 | 
					        for (var val in this.state.schemaContent){
 | 
				
			||||||
 | 
					            arr2.push(val);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return arr2.map(this.getCollectionComponentInfo, collectionInfo);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getCollectionComponentInfo(num){
 | 
				
			||||||
 | 
					        var arr3 = [];
 | 
				
			||||||
 | 
					        for (var val in this[0]){
 | 
				
			||||||
 | 
					            arr3.push(val);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return <FlameLinkCollectionComponentCreations schemaData={this[0]} schemaContent={this[1][num]} arr={arr3} key={num} />
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    render() {
 | 
				
			||||||
 | 
					        return(
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {this.getCollectionContent(this.props.schemaData)}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default FlameLinkCollection;
 | 
				
			||||||
							
								
								
									
										25
									
								
								src/components/FlameLinkCollectionComponentCreations.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/components/FlameLinkCollectionComponentCreations.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					import React, { Component} from 'react';
 | 
				
			||||||
 | 
					import Grid from '@material-ui/core/Grid';
 | 
				
			||||||
 | 
					import FlameLinkCollectionStructure from './FlameLinkCollectionStructure';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FlameLinkCollectionComponentCreations extends Component {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    createCollectionEntries(schemaData, schemaContent, arr){
 | 
				
			||||||
 | 
					        var collectionInfo = [schemaData, schemaContent];
 | 
				
			||||||
 | 
					        return arr.map(this.createCollectionComponents, collectionInfo);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    createCollectionComponents(num){
 | 
				
			||||||
 | 
					        return <FlameLinkCollectionStructure schemaData={this[0]} schemaContent={this[1]} field={this[0][num]} type={this[0][num].type} key={this[0][num].key} />
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    render() {
 | 
				
			||||||
 | 
					        return(
 | 
				
			||||||
 | 
					                <Grid container>
 | 
				
			||||||
 | 
					                    {this.createCollectionEntries(this.props.schemaData, this.props.schemaContent, this.props.arr)}
 | 
				
			||||||
 | 
					                </Grid>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default FlameLinkCollectionComponentCreations;
 | 
				
			||||||
							
								
								
									
										128
									
								
								src/components/FlameLinkCollectionStructure.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								src/components/FlameLinkCollectionStructure.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,128 @@
 | 
				
			|||||||
 | 
					import React, { Component} from 'react';
 | 
				
			||||||
 | 
					import Grid from '@material-ui/core/Grid';
 | 
				
			||||||
 | 
					import Typography from '@material-ui/core/Typography';
 | 
				
			||||||
 | 
					import { withStyles } from '@material-ui/core/styles';
 | 
				
			||||||
 | 
					import flamelinkApp from '../flamelink.js';
 | 
				
			||||||
 | 
					import FlameLinkImage from './FlameLinkImage';
 | 
				
			||||||
 | 
					import FlameLinkFieldSet from './FlameLinkFieldSet';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const styles = theme => ({
 | 
				
			||||||
 | 
					        flamelinkItem: {
 | 
				
			||||||
 | 
					            paddingRight: 20,
 | 
				
			||||||
 | 
					            paddingLeft: 20,
 | 
				
			||||||
 | 
					            paddingTop: 20,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FlameLinkCollectionStructure extends Component {
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        global.mediaID = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.state = {
 | 
				
			||||||
 | 
					          schemaContent: '',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        flamelinkApp.content.get(global.schemaName)
 | 
				
			||||||
 | 
					        .then(result => this.setState({
 | 
				
			||||||
 | 
					          schemaContent: result
 | 
				
			||||||
 | 
					        }))
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getContent(content, field, key, type, description){
 | 
				
			||||||
 | 
					        if (type === 'text'){
 | 
				
			||||||
 | 
					                if(description === 'h1'){
 | 
				
			||||||
 | 
					                    return  (
 | 
				
			||||||
 | 
					                            <Typography variant='display4' id={key}>
 | 
				
			||||||
 | 
					                                {content[key]}
 | 
				
			||||||
 | 
					                            </Typography>
 | 
				
			||||||
 | 
					                            )                
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(description === 'h2'){
 | 
				
			||||||
 | 
					                    return  (
 | 
				
			||||||
 | 
					                            <Typography variant='display3' id={key}>
 | 
				
			||||||
 | 
					                                {content[key]}
 | 
				
			||||||
 | 
					                            </Typography>
 | 
				
			||||||
 | 
					                            )                
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(description === 'h3'){
 | 
				
			||||||
 | 
					                    return  (
 | 
				
			||||||
 | 
					                            <Typography variant='display2' id={key}>
 | 
				
			||||||
 | 
					                                {content[key]}
 | 
				
			||||||
 | 
					                            </Typography>
 | 
				
			||||||
 | 
					                            )                
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(description === 'h4'){
 | 
				
			||||||
 | 
					                    return  (
 | 
				
			||||||
 | 
					                            <Typography variant='display1' id={key}>
 | 
				
			||||||
 | 
					                                {content[key]}
 | 
				
			||||||
 | 
					                            </Typography>
 | 
				
			||||||
 | 
					                            )                
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(description === 'h5'){
 | 
				
			||||||
 | 
					                    return  (
 | 
				
			||||||
 | 
					                            <Typography variant='headline' id={key}>
 | 
				
			||||||
 | 
					                                {content[key]}
 | 
				
			||||||
 | 
					                            </Typography>
 | 
				
			||||||
 | 
					                            )                
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(description === 'h6'){
 | 
				
			||||||
 | 
					                    return  (
 | 
				
			||||||
 | 
					                            <Typography variant='title' id={key}>
 | 
				
			||||||
 | 
					                                {content[key]}
 | 
				
			||||||
 | 
					                            </Typography>
 | 
				
			||||||
 | 
					                            )                
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else{
 | 
				
			||||||
 | 
					                    return  (
 | 
				
			||||||
 | 
					                            <Typography variant='body2' component="p" id={key}>
 | 
				
			||||||
 | 
					                                {content[key]}
 | 
				
			||||||
 | 
					                            </Typography>
 | 
				
			||||||
 | 
					                            )
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if(type === 'textarea'){
 | 
				
			||||||
 | 
					                return  (
 | 
				
			||||||
 | 
					                        <Typography variant='body2' component="p" id={key}>
 | 
				
			||||||
 | 
					                            {content[key]}
 | 
				
			||||||
 | 
					                        </Typography>
 | 
				
			||||||
 | 
					                        )               
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (type === 'media'){
 | 
				
			||||||
 | 
					                for (var val in content[key]){
 | 
				
			||||||
 | 
					                    global.mediaID = content[key][val];
 | 
				
			||||||
 | 
					                    return <FlameLinkImage/>
 | 
				
			||||||
 | 
					                } 
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (type === 'fieldset'){
 | 
				
			||||||
 | 
					                if(content === ''){
 | 
				
			||||||
 | 
					                    return
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else{
 | 
				
			||||||
 | 
					                    return <FlameLinkFieldSet field={content[key]} field2={field.options}/>
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        console.log('Content: ', content)
 | 
				
			||||||
 | 
					        console.log('Field: ', field)
 | 
				
			||||||
 | 
					        console.log('Key: ', key)
 | 
				
			||||||
 | 
					        console.log('Type: ', type)
 | 
				
			||||||
 | 
					        console.log('Description: ', description)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    render() {
 | 
				
			||||||
 | 
					        const { classes } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const lg = this.props.field.gridColumns.lg;
 | 
				
			||||||
 | 
					        const md = this.props.field.gridColumns.md;
 | 
				
			||||||
 | 
					        const sm = this.props.field.gridColumns.sm;
 | 
				
			||||||
 | 
					        const xs = this.props.field.gridColumns.xs;
 | 
				
			||||||
 | 
					        return(
 | 
				
			||||||
 | 
					            <Grid item lg={lg} md={md} sm={sm} xs={xs} className={classes.flamelinkItem}>
 | 
				
			||||||
 | 
					                    {this.getContent(this.props.schemaContent, this.props.field, this.props.field.key, this.props.type, this.props.field.description)}
 | 
				
			||||||
 | 
					            </Grid>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default withStyles(styles)(FlameLinkCollectionStructure);
 | 
				
			||||||
@ -1,25 +1,39 @@
 | 
				
			|||||||
import React, { Component} from 'react';
 | 
					import React, { Component} from 'react';
 | 
				
			||||||
import FlameLinkStructure from './FlameLinkStructure';
 | 
					import FlameLinkStructure from './FlameLinkStructure';
 | 
				
			||||||
 | 
					import FlameLinkCollection from './FlameLinkCollection';
 | 
				
			||||||
import Grid from '@material-ui/core/Grid';
 | 
					import Grid from '@material-ui/core/Grid';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class FlameLinkComponentCreations extends Component {
 | 
					class FlameLinkComponentCreations extends Component {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    getSchemaFieldData(schemaData){
 | 
					    getSchemaFieldData(schemaData, schemaType){
 | 
				
			||||||
        var arr = [];
 | 
					        var arr = [];
 | 
				
			||||||
        for (var val in schemaData){
 | 
					        for (var val in schemaData){
 | 
				
			||||||
            arr.push(val);
 | 
					            arr.push(val);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return arr.map(this.createComponents, schemaData);
 | 
					
 | 
				
			||||||
 | 
					        if(schemaType === 'single'){
 | 
				
			||||||
 | 
					            return arr.map(this.createSingleTypeSchemaComponents, schemaData);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(schemaType === 'collection'){
 | 
				
			||||||
 | 
					            return this.createCollectionTypeSchemaComponents(schemaData);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else{
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    createComponents(num){
 | 
					    createSingleTypeSchemaComponents(num){
 | 
				
			||||||
        return <FlameLinkStructure schemaData={this} field={this[num]} type={this[num].type} key={this[num].key} />
 | 
					        return <FlameLinkStructure schemaData={this} field={this[num]} type={this[num].type} key={this[num].key} />
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    createCollectionTypeSchemaComponents(schemaData){  
 | 
				
			||||||
 | 
					        return <FlameLinkCollection schemaData={schemaData} />
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    render() {
 | 
					    render() {
 | 
				
			||||||
        return(
 | 
					        return(
 | 
				
			||||||
                <Grid container>
 | 
					                <Grid container>
 | 
				
			||||||
                    {this.getSchemaFieldData(this.props.schemaDetails)}
 | 
					                    {this.getSchemaFieldData(this.props.schemaDetails, this.props.schemaType)}
 | 
				
			||||||
                </Grid>
 | 
					                </Grid>
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -6,16 +6,22 @@ class About extends Component {
 | 
				
			|||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
        super();
 | 
					        super();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        global.schemaName = 'martenSchemaDemo';
 | 
					        global.schemaName = 'martenAbout';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.state = {
 | 
					        this.state = {
 | 
				
			||||||
          schemaDetails: '',
 | 
					          schemaDetails: '',
 | 
				
			||||||
 | 
					          schemaType: '',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options' ] })
 | 
					        flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options' ] })
 | 
				
			||||||
        .then(result => this.setState({
 | 
					        .then(result => this.setState({
 | 
				
			||||||
          schemaDetails: result
 | 
					          schemaDetails: result
 | 
				
			||||||
        }))
 | 
					        }))
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        flamelinkApp.schemas.get(global.schemaName)
 | 
				
			||||||
 | 
					        .then(result => this.setState({
 | 
				
			||||||
 | 
					          schemaType: result.type
 | 
				
			||||||
 | 
					        }))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    render() {
 | 
					    render() {
 | 
				
			||||||
@ -23,9 +29,8 @@ class About extends Component {
 | 
				
			|||||||
        return (
 | 
					        return (
 | 
				
			||||||
            <div>
 | 
					            <div>
 | 
				
			||||||
                <Fragment>
 | 
					                <Fragment>
 | 
				
			||||||
                    <FlameLinkComponentCreations schemaDetails = {this.state.schemaDetails}/>
 | 
					                    <FlameLinkComponentCreations schemaDetails = {this.state.schemaDetails} schemaType = {this.state.schemaType}/>
 | 
				
			||||||
                </Fragment>
 | 
					                </Fragment>
 | 
				
			||||||
          
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -10,17 +10,23 @@ class Home extends Component {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        this.state = {
 | 
					        this.state = {
 | 
				
			||||||
            schemaDetails: '',
 | 
					            schemaDetails: '',
 | 
				
			||||||
 | 
					            schemaType: '',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options'] })
 | 
					        flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options'] })
 | 
				
			||||||
            .then(result => this.setState({
 | 
					            .then(result => this.setState({
 | 
				
			||||||
                schemaDetails: result
 | 
					                schemaDetails: result
 | 
				
			||||||
            }))
 | 
					            }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        flamelinkApp.schemas.get(global.schemaName)
 | 
				
			||||||
 | 
					            .then(result => this.setState({
 | 
				
			||||||
 | 
					              schemaType: result.type
 | 
				
			||||||
 | 
					            }))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    render() {
 | 
					    render() {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
            <FlameLinkComponentCreations schemaDetails={this.state.schemaDetails} />
 | 
					            <FlameLinkComponentCreations schemaDetails={this.state.schemaDetails} schemaType = {this.state.schemaType}/>
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user