swapp201901-team9 / frontend

course repository :
https://github.com/snu-sf-class/swpp201901
1 stars 4 forks source link

Design page 탭으로 만든 버전 #149

Open SiennaHan opened 5 years ago

SiennaHan commented 5 years ago

import React from 'react'; import {connect} from 'react-redux' import {fabric} from 'fabric'; import {CirclePicker} from 'react-color';

import { Tabs, TabContent, TabLink } from 'react-tabs-redux'; //import ThreeScene from './ThreeScene';

import FabricCanvas from './FabricCanvas'; import MyGroupList from '../GroupPage/MyGroupList';

//import ImageUploader from 'react-images-upload';

import { toSaveDesign, toNewDesign } from '../../actions/index.js';

//import ThreeScene from './ThreeScene';

//the templates are imported as images and passed as porps to the TemplateList components. //if the user chooses any of the properties, the state gets updated in the DesignPage component //it gets passed onto FabricCanvas as prop //FabricCanvas uses lifecycle method ComponentWillReceiveProps() to update the canvas //about saveToCanvas: use a method from fabric named TODataUrl()

// export default class DesignPage extends React.Component { class DesignPage extends React.Component { constructor(props){ console.log("DesignPage - constructor") super(props);

    this.state = {
        design : {
            body: this.props.now_design.detail_body,
            sleeve: this.props.now_design.detail_sleeve,
            banding: this.props.now_design.detail_banding,
            stripe: this.props.now_design.detail_stripes,
            button: this.props.now_design.detail_buttons
        },

        text : {
            frontchest: {
                textvalue: "S",
                fontFamily: "arial",
                fill: "#3f51b5",
                fontStyle: "bold",
                fontSize: 50,
                left: 250,
                top: 110,
            },
            rightarm: {
                textvalue: "19",
                fontFamily: "arial",
                fill: "#607d8b",
                fontStyle: "bold",
                fontSize: 50,
                left: 50,
                top: 120,
            },
            upperback: {
                textvalue: "SEOUL NAT'L",
                fontFamily: "arial",
                fill: "#ffc107",
                fontStyle: "bold",
                fontSize: 25,
                left: 135,
                top: 125,
            },
            middleback: {
                textvalue: "UNIVERSITY",
                fontFamily: "arial",
                fill: "#ffc107",
                fontStyle: "bold",
                fontSize: 20,
                left: 155,
                top: 155,
            },
            lowerback: {
                textvalue: "Department of\nComputer Science",
                fontFamily: "arial",
                fill: "#ffc107",
                fontStyle: "italic",
                fontSize: 15,
                left: 150,
                top: 190,
            }

            // frontchest: this.props.now_design.front_chest,
            // rightarm: this.props.now_design.right_arm,
            // upperback: this.props.now_design.upper_back,
            // middleback: this.props.now_design.middle_back,
            // lowerback: this.props.now_design.lower_back
        },

        designClickedWhat: null,
        textClickedWhat: "frontchest",
    };

    this.handleElementChange = this.handleElementChange.bind(this);
    this.handleDesignChange = this.handleDesignChange.bind(this);
    this.handleTextChange = this.handleTextChange.bind(this);
    this.handleTextColorChange = this.handleTextColorChange.bind(this);

    this.designElementToImage = this.designElementToImage.bind(this);
    this.textElementToImage = this.textElementToImage.bind(this);
    this.updateFrontCanvas = this.updateFrontCanvas.bind(this);
    this.updateBackCanvas = this.updateBackCanvas.bind(this);

    this.clickedInitButton = this.clickedInitButton.bind(this);
    this.clickedAddButton = this.clickedAddButton.bind(this);
    this.moveHandler = this.moveHandler.bind(this);
    this.onDrop = this.onDrop.bind(this);
}

componentWillMount() {
    console.log("DesignPage - componentWillMount")
    this.design_color = {
        body: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
            "#097c25", "#0075a9", "#601986", "#580b0b", "#cfcfcf", "#626262", "#001c58", "#232323"],
        sleeve: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
            "#097c25", "#0075a9", "#601986", "#580b0b", "#fcfcfc", "#626262", "#001c58", "#232323"],
        stripe: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
            "#097c25", "#0075a9", "#601986", "#580b0b", "#fcfcfc", "#cfcfcf", "#001c58", "#232323"],
        banding: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
            "#097c25", "#0075a9", "#601986", "#580b0b", "#cfcfcf", "#626262", "#001c58", "#232323"],
        button: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
            "#097c25", "#0075a9", "#601986", "#580b0b", "#cfcfcf", "#626262", "#001c58", "#232323"]
    }

    this.design_element = ["body", "sleeve", "stripe", "banding", "button"]
    this.text_element = ["frontchest", "rightarm", "upperback", "middleback", "lowerback"]
}

componentDidMount() {
    console.log("DesignPage - componentDidMount")

    this.the_front_canvas = new fabric.Canvas('front-canvas', {
        preserveObjectStacking: true,
        height:460,
        width:430,
    });

    this.the_back_canvas = new fabric.Canvas('back-canvas', {
        preserveObjectStacking: true,
        height:460,
        width:430,
    });

    this.the_front_canvas.on({
        'object:moved': this.moveHandler,
    })

    this.the_back_canvas.on({
        'object:moved': this.moveHandler,
    })

    this.the_front_canvas.add(this.designElementToImage(this.state.design.body, "front_body", 0))
    this.the_back_canvas.add(this.designElementToImage(this.state.design.body, "back_body", 0))
    this.the_front_canvas.add(this.designElementToImage(this.state.design.sleeve, "front_sleeve", 0))
    this.the_back_canvas.add(this.designElementToImage(this.state.design.sleeve, "back_sleeve", 0))
    this.the_front_canvas.add(this.designElementToImage(this.state.design.banding, "front_banding", 0))
    this.the_back_canvas.add(this.designElementToImage(this.state.design.banding, "back_banding", 0))
    this.the_front_canvas.add(this.designElementToImage(this.state.design.stripe, "front_stripe", 2))
    this.the_back_canvas.add(this.designElementToImage(this.state.design.stripe, "back_stripe", 2))
    this.the_front_canvas.add(this.designElementToImage(this.state.design.button, "front_button", 2))

    this.the_front_canvas.add(this.textElementToImage(this.state.text.frontchest, "frontchest"))
    this.the_front_canvas.add(this.textElementToImage(this.state.text.rightarm, "rightarm"))
    this.the_back_canvas.add(this.textElementToImage(this.state.text.upperback, "upperback"))
    this.the_back_canvas.add(this.textElementToImage(this.state.text.middleback, "middleback"))
    this.the_back_canvas.add(this.textElementToImage(this.state.text.lowerback, "lowerback"))

    // console.log("the_front_canvas: ", this.the_front_canvas);
    //this.the_front_canvas.renderAll();
    //this.the_back_canvas.renderAll();
}

componentWillUpdate = (nextProps, nextState) => {
    console.log("DesignPage - componentWillUpdate nextState: ", nextState)

    // If Updated Item is not the same as the old one
    //         => Update the canvas with newer item
    for(let element of this.design_element){
        if(nextState.design[element] !== this.state.design[element]) {
            if(element === "stripe" ) {
                this.updateFrontCanvas(this.designElementToImage(nextState.design[element], 'front_'+element, 2))
                this.updateBackCanvas(this.designElementToImage(nextState.design[element], 'back_'+element, 2))
            }
            else if (element === "button") {
                this.updateFrontCanvas(this.designElementToImage(nextState.design[element], 'front_'+element, 2))
            }
            else {
                this.updateFrontCanvas(this.designElementToImage(nextState.design[element], 'front_'+element, 0))
                this.updateBackCanvas(this.designElementToImage(nextState.design[element], 'back_'+element, 0))
                //this.forceUpdate();
                //console.log("force update");
            }
        }
    }

    for(let element of this.text_element){
        if(nextState.text[element] !== this.state.text[element]) {
            if(element === "frontchest" || element === "rightarm") {
                this.updateFrontCanvas(this.textElementToImage(nextState.text[element], element))
            }
            else {
                this.updateBackCanvas(this.textElementToImage(nextState.text[element], element))
            }
        }
    }

    this.the_front_canvas.renderAll();
    this.the_back_canvas.renderAll();

}

handleElementChange(e){
    console.log("DesignPage - handleElementChange target: ", e.target)
    let id = e.target.id;
    let value = e.target.value;

    if(id === "design_element") {
        this.setState({designClickedWhat: value})
    }
    else if(id === "text_element") {
        this.setState({textClickedWhat: value})
    }
}

handleDesignChange(color) {
    console.log("DesignPage - handleDesignChange")
    let design_element = document.getElementById("design_element").value;

    switch(design_element) {

    case 'body':
    console.log("body")
        this.setState({design : {
            body: color.hex,
            sleeve: this.state.design.sleeve,
            banding: this.state.design.banding,
            stripe: this.state.design.stripe,
            button: this.state.design.button
         }});
        break;

    case 'sleeve':
        this.setState({design : {
            body: this.state.design.body,
            sleeve: color.hex,
            banding: this.state.design.banding,
            stripe: this.state.design.stripe,
            button: this.state.design.button
        }});
        break;

    case 'banding':
        this.setState({design : {
            body: this.state.design.body,
            sleeve: this.state.design.sleeve,
            banding: color.hex,
            stripe: this.state.design.stripe,
            button: this.state.design.button
        }});
        break;

    case 'stripe':
        this.setState({design : {
            body: this.state.design.body,
            sleeve: this.state.design.sleeve,
            banding: this.state.design.banding,
            stripe: color.hex,
            button: this.state.design.button
        }});

        break;

    case 'button':
        this.setState({design : {
            body: this.state.design.body,
            sleeve: this.state.design.sleeve,
            banding: this.state.design.banding,
            stripe: this.state.design.stripe,
            button: color.hex
        }});

        break;

    default:
        this.setState({design : {
            body: this.state.design.body,
            sleeve: this.state.design.sleeve,
            banding: this.state.design.banding,
            stripe: this.state.design.stripe,
            button: this.state.design.button
        }});
        break;
    }

    this.setState({design : ({...this.state.design, [design_element]: color.hex})})
}

handleTextChange(e) {
    let text_element = document.getElementById("text_element").value;
    console.log("DesignPage - handleTextChange e.target: ", e.target, " text element: ", text_element)

    this.setState({text : ({...this.state.text,
        [text_element]: ({...this.state.text[text_element], [e.target.name]:e.target.value})
    })});
}

handleTextColorChange(color) {
    let text_element = document.getElementById("text_element").value;
    console.log("DesignPage - handleTextColorChange")

    this.setState({text : ({...this.state.text,
        [text_element]: ({...this.state.text[text_element], fill: color.hex})
    })});
}

// componentDidUpdate(nextProps, nextState) {
//     this.the_front_canvas.renderAll();
//     this.the_back_canvas.renderAll();
// }

designElementToImage(color, type, z_Index) {
    console.log("DesignPage - designElementToImage - color: ", color, "type: ", type)

    var imgElement = document.createElement("img");
    var src = './images/templates/' + type + '/' + type + color.substring(1)+'.png';

    // console.log("src: ", src)
    imgElement.setAttribute("src", require(src));

    var imgInstance = new fabric.Image(imgElement, {
        width: 430,
        height: 460,
        the_type: type                                                         ,
        zIndex: z_Index
    });

    // console.log("imgInstance: ", imgInstance)
    return imgInstance
}

textElementToImage(text, type) {
    console.log("DesignPage - textElementToImage")
    let imgInstance = new fabric.IText(text.textvalue, {
        fontFamily: text.fontFamily,
        fill: text.fill,
        fontStyle: text.fontStyle,
        fontSize: text.fontSize,
        the_type: type,
        zIndex: 10,
        left: text.left,
        top: text.top,
        textAlign: "center"
    })

    // console.log("text imgInstance: ", imgInstance)
    return imgInstance
}

updateFrontCanvas = (next) => {
    console.log("DesignPage - updateFrontCanvas next: ", next)

    if(next){
        // this.the_front_canvas.add(next);

        let to_remove;
        // Find the same kind of element
        this.the_front_canvas.forEachObject( (object) => {

            if(object.the_type === next.the_type){
                console.log("obcject.the_type: ", object.the_type, " next.the_type: ", next.the_type)
                to_remove = object;
                this.the_front_canvas.remove(to_remove);
            }
        } );

        //this.the_front_canvas.remove(to_remove);
        // console.log("remove front canvas");
        //this.the_front_canvas.renderAll();

        // if(next.the_type === 'bg'){
        //     this.the_front_canvas.setBackgroundImage(next);
        //     this.the_front_canvas.renderAll();
        //     return;
        // }

        this.the_front_canvas.add(next);
        // console.log("add to front canvas");
        //this.the_front_canvas.requestRenderAll();

        this.the_front_canvas.moveTo(next, next.zIndex);
        this.the_front_canvas.renderAll();
        // this.forceUpdate();
        //console.log("rerender");
    }
}

updateBackCanvas = (next) => {
    console.log("DesignPage - updateBackCanvas next: ", next)

    if(next){

        let to_remove;
        // Find the same kind of element
        this.the_back_canvas.forEachObject( (object) => {

            if(object.the_type === next.the_type){
                to_remove = object;
                this.the_back_canvas.remove(to_remove);
            }
        } );

        //this.the_back_canvas.remove(to_remove);
        //this.the_back_canvas.renderAll();

        // if(next.the_type === 'bg'){
        //     this.the_back_canvas.setBackgroundImage(next);
        //     this.the_back_canvas.renderAll();
        //     return;
        // }

        this.the_back_canvas.add(next);
        //this.the_back_canvas.renderAll();
        this.the_back_canvas.moveTo(next, next.zIndex);
        //this.the_back_canvas.renderAll();
    }
}

clickedInitButton = (e) => {
    this.setState({designClickedWhat: "body"});
    this.forceUpdate();
}

clickedAddButton = (e) => {
    this.forceUpdate();
}

moveHandler = (e) =>{
    let movingObject = e.target;
    console.log(movingObject)
    console.log("left: ", movingObject.get('left'), " top: ", movingObject.get('top'))

    this.setState({text : ({...this.state.text,
        [movingObject.the_type]: ({...this.state.text[movingObject.the_type],
            left:movingObject.get('left'),
            top: movingObject.get('top')})
    })});
}

onDrop = (e) => {
    console.log("hey");

    e.preventDefault();
    var preview = document.getElementById('img');
    var file = document.getElementById('input').files[0];
    var canvas = this.the_front_canvas;
    let reader = new FileReader();
    reader.addEventListener("load", function() {
        preview.src = reader.result;
        var imgInstance = new fabric.Image(preview, {
        width: 899,
        height:959,
        the_type: "upload",
        zIndex: 12
        });
        console.log("imgInstance set");
        imgInstance.set({
            scaleY: 0.1,
            scaleX: 0.1,
            originX: "center",
            originY: "center"
        });
        console.log("imgInstance scale");

    },false);

    if (file) {
        reader.readAsDataURL(file);
    }

    this.the_front_canvas = canvas;
}

// FabricCanvas onDrop
// onDrop = (e) => {
//     console.log("hey");

//     e.preventDefault();
//     var preview = document.getElementById('img');
//     //var img = new Image(40, 40);
//     var file = document.getElementById('input').files[0];
//     var canvas = this.the_front_canvas;
//     var canvas2 = this.the_back_canvas;
//     let reader = new FileReader();
//     reader.addEventListener("load", function() {
//         preview.src = reader.result;
//         //img.src = reader.result;
//         /*var imgInstance = new fabric.Image(preview, {
//         width: 40,
//         height: 40,
//         the_type: "upload",
//         zIndex: 2
//         });*/
//         console.log(preview.width);
//         console.log(preview.height);

//         var imgInstance = new fabric.Image(preview, {
//         width: 899,
//         height:959,
//         the_type: "upload",
//         zIndex: 10
//         });
//         console.log("imgInstance set");
//         imgInstance.set({
//             scaleY: 0.1,
//             scaleX: 0.1,
//             originX: "center",
//             originY: "center"
//         });
//         console.log("imgInstance scale");
//         canvas.add(imgInstance);
//         canvas2.add(imgInstance);
//         canvas.renderAll();
//         canvas2.renderAll();
//         canvas.moveTo(imgInstance, imgInstance.zIndex);
//         canvas2.moveTo(imgInstance, imgInstance.zIndex);
//         canvas.renderAll();
//         canvas2.renderAll();
//         console.log("imgInstance add");

//         //var imgInstance = new fabric.Image(preview);
//         /*this.the_canvas = new fabric.Canvas('main-canvas', {
//             preserveObjectStacking: true,
//             height:959,
//             width:899,
//         });*/

//     },false);

//     /*reader.onloadend = () => {
//         var img = new Image(40,40);
//         img.src = reader.result;

//         var imgInstance = new fabric.Image(img, {
//             width: 899,
//             height: 959,
//             the_type: "upload",
//             zIndex: 2
//         });
//         this.the_canvas.add(imgInstance);
//     }*/

//     if (file) {
//         reader.readAsDataURL(file);
//     }
//     //console.log(img.src);
//     /*var imgInstance = new fabric.Image(img, {
//         width: 40,
//         height: 40,
//         the_type: "upload",
//         zIndex: 2
//     });*/
//     //var imgInstance = new fabric.Image(img);
//     //this.the_canvas.add(imgInstance);
//     this.the_front_canvas = canvas;
// }

saveToCanvas = () => {
    console.log("DesignPage - saveToCanvas")

    let link = document.createElement("a");
    link.href = this.the_canvas.toDataURL({format: 'png'});
    link.download = "design.png";
    link.click();

}

fileChangedHandler = (event) => {
    const file = event.target.files[0];
    this.setState({selectedFile: file});
}

render() {
    console.log("DesignPage - render state: ", this.state)
    const clickedWhat = this.state.designClickedWhat;
    let colorPicker;

    if(clickedWhat === null) {
        colorPicker = <button  onClick={(e) => this.clickedInitButton(e)}>DEFAULT</button>
    }
    else {
        colorPicker = <CirclePicker width="220" id="design_colour"
            onChangeComplete={this.handleDesignChange} colors={this.design_color[clickedWhat]}/>;
    }

    (function() {
// 처음 탭만 활성화 시켜놓음
if (!!location.hash) return;

var link = document.querySelector('.tab-section > .tab-link');
if (link) link.click();

})();

    return (
        <div>
    <section className="wrap clear col3">

        {/*<!--========================================
            LEFT SIDE BAR
        =========================================-->*/}
        <div className="aside">
            <h2 className="h_white">SELECT STYLE</h2>

            <div className="content">

                {/*<!--========================================
                    Design section
                =========================================-->*/}
                <h1>Design</h1>
                <center>
                    <select id="design_element" onChange={(e)=>this.handleElementChange(e)}>
                        <option value = "body">body</option>
                        <option value = "sleeve">sleeve</option>
                        <option value = "banding">banding</option>
                        <option value = "stripe">stripe</option>
                        <option value = "button">button</option>
                    </select>
                    <br/><br/>
                    {colorPicker}
                    <br/>
                    <div className="Button-Field-Side">
                        <button onClick={(e) => this.clickedAddButton(e)}>ADD</button>
                    </div>
                </center>

                {/*<!--========================================
                    Text section
                =========================================-->*/}
                <h1>Text</h1>
                <center>
                    <select id="text_element" onChange={(e)=>this.handleElementChange(e)}>
                        <option value="frontchest">Front Chest</option>
                        <option value="rightarm">Right Arm</option>
                        <option value="upperback">Upper Back</option>
                        <option value="middleback">Middle Back</option>
                        <option value="lowerback">Lower Back</option>
                    </select>

                    <textarea id="text_area" placeholder={this.state.text[this.state.textClickedWhat].textvalue}
                        name="textvalue" onChange={(e)=>this.handleTextChange(e)}/>

                    <p>Font</p>
                    <select id="text_font" name="fontFamily" onChange={(e)=>this.handleTextChange(e)}>
                        <option>arial</option>
                        <option>tahoma</option>
                        <option>Alfa Slab One</option>
                        <option>Teko</option>
                        <option>Damion</option>

                    </select>

                    <p>Style</p>
                    <select id="text_style" name="fontStyle" onChange={(e)=>this.handleTextChange(e)}>
                        <option>normal</option>
                        <option>italic</option>
                        <option>oblique</option>
                        <option>bold</option>
                    </select>

                    <p>Size</p>
                    <input type="range"  min="0" max="200" defaultValue="100" id="text_size"
                        name="fontSize" onChange={(e)=>this.handleTextChange(e)}/>

                    <p>Color</p>
                        <CirclePicker width="220" id="text_colour" name="fill" onChangeComplete={this.handleTextColorChange}/>

                </center>

                {/*<!--========================================
                    Image Upload Section
                =========================================-->*/}
                <h1>Logo</h1>
                <input type = "file" id = "input" onChange = {this.onDrop} />
                <img src = "" id = "img" />
            </div>
        </div>

        {/*<!--========================================
            CENTER DESIGN SECTION
        =========================================-->*/}
        <div className="main">
            <h2 className="h_white">SAMPLE VIEW</h2>
            <div className="content">

                {/*<!--========================================
                    Fabric Canvas Section
                =========================================-->*/}
                {/*<ThreeScene/>*/}
                <div id="plain-react">
                <Tabs
  className="tabs tabs-1"
  onChange={tab => console.log(`Tab selected: ${tab}`)} // eslint-disable-line no-console
>
                  <TabLink to="tab1">FRONT</TabLink>
                  <TabLink to="tab2">BACK</TabLink>
                  <TabContent for="tab1">
                        <div classname="canvas-bg">
                            <canvas id="front-canvas">
                        </canvas></div>
                    </TabContent>
                  <TabContent for="tab2">
                        <div classname="canvas-bg">
                <canvas id="back-canvas">
            </canvas></div>

                    </TabContent>

                </Tabs>
                </div>

                {/*<!--========================================
                    NEW & SAVE Button Section
                =========================================-->*/}
                {this.props.isLoggedIn ?
                    (<div>
                        <button className="new_btn" type="button" onClick={() => this.props.onNew()}>NEW</button>
                        <button className="save_btn" type="button" onClick={() => this.props.onSave(this.props.now_design.id, this.state.design, this.state.text)}>SAVE</button>
                    </div>)
                    : <div>
                        <button className="new_btn" type="button" onClick={() => this.props.onNew()}>NEW</button>
                    </div>
                }

            </div>

        </div>

        {/*<!--========================================
            RIGHT SIDE BAR
        =========================================-->*/}
        <div className="aside">
            <h2 className="h_black">MY GROUP</h2>
            <div className="content">
                {this.props.isLoggedIn? <MyGroupList /> : <p>로그인을 해주세요</p>}
            </div>
        </div>
    </section>
    </div>
    );
}

}

const mapStateToProps = (state) => ({ isLoggedIn: state.authorization, now_design: state.now_design, my_groups: state.my_groups, })

const mapDispatchToProps = (dispatch) => ({ onNew: () => dispatch(toNewDesign()), onSave: (designid, design, text) => dispatch(toSaveDesign(designid, design, text)), })

export default connect (mapStateToProps, mapDispatchToProps)(DesignPage)

SiennaHan commented 5 years ago

$ yarn add react-tabs-redux or $ npm install react-tabs-redux

이걸로 탭 installation하고 써야 됩니당

SiennaHan commented 5 years ago

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {

margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } .app{ margin: auto; padding: auto; } body { margin: 0; padding: 0; font-family: 'Noto Sans KR', sans-serif; color: #000000; background-color: #f7f7f7; } li{ list-style: none; } a:hover, a:visited, a{ text-decoration: none; }

/ heading / h1,h2,h3,h4,h5,h6{ font-family: 'Bree Serif', serif; text-align: center; line-height:60px; } .h_white{ color:#000; border-bottom:1px solid #d8d8d8; } .h_black{ background:#393939; color:#fff; border-bottom:1px solid #d8d8d8; }

/ layout / .wrap{ width:100%; max-width: 1080px; margin:0 auto }

.col3 > div{ float:left; }

.col3 > .aside{ width:24%; }

.col3 > .main{ width:48%; margin:20px 2%; }

.main{ width:48%; margin:20px auto; }

header { width: 100%; background-image: linear-gradient(to right, #de5736, #6414d2), linear-gradient(to right, #bb2929, #a83685 34%, #513ab0 66%, #1964ac); font-family: 'Noto Sans KR', sans-serif; } .logo{ width: 135px; height: 40px; margin-top: 18px; background: url("./login_logo.png") no-repeat; background-size:120px; float:left; display:inline-block; } .navBar{ text-align:right; } .navBar li { display:inline-block; list-style: none; font-size: 14px; color: #fff; } .navBar a { box-sizing: border-box; display:block; padding:20px 40px; color: #fff;

}

.clear:after{ content:''; display: block; height:0; clear:both; }

section > div{ margin:20px 0; / margin: 20px 0 20px 0 / padding-bottom : 50px; background:#fff; box-sizing: border-box; }

.content{ padding:20px; }

.Button-Field{ box-sizing: border-box; font-size: 12px; color: black; padding: 10px 0px 10px 0px; margin: 10px 60px 10px 60px;

}

.Button-Field-Side{

box-sizing: border-box; font-size: 12px; color: black; padding: 10px 0px 10px 0px; margin: 10px 0px 10px 0px; }

button{

width: 100%; height: 40px; border-radius: 21px; border: none; box-shadow: 2px 3px 7px 0 rgba(243, 138, 138, 0.5); background-color: #c13a3a; color: #fff; } *:focus { outline: none; } .button_white{ border-radius: 21px; box-shadow: 2px 4px 7px 0 rgba(244, 137, 137, 0.5); border: solid 2px #c13a3a; background-color: #fff; color: #c13a3a; } select { width: 100%; height: 30px; padding: 2px 8px; font-size: 12px; color: #999; border: 1px solid #ddd; background: url("./selector.png") no-repeat right 6px center; apperance: none; -webkit-appearance: none; } select::-ms-expand {display:none;}

/tab/

plain-react .tabs {

width: 100%;
display: inline-block;
margin-right: 30px;
vertical-align: top;

}

plain-react .tabs-1 .tab-links {

margin: 0;
padding: 0;
box-shadow: 0px;
border: 1px solid #ccc;
border-bottom: 1px solid #868686;
height: 35px;
position: relative;
top: 5px;

}

plain-react .tabs-1 .tab-link {

width: 20%;
border-radius: 2px;
font-size: 13px;
margin: 2px 10px;
cursor: pointer;
border: 1px solid transparent;
color: #666;
box-shadow: none;
background: transparent;
display: inline;
position: relative;
height: 40px;
line-height: 41px;
top: -4px;
left: -1px;
outline: none;

}

plain-react .tabs-1 .tab-link:hover,

plain-react .tabs-1 .tab-link:focus {

color: #666464;

}

plain-react .tabs-1 .tab-link-active,

plain-react .tabs-1 .tab-link-active:hover,

plain-react .tabs-1 .tab-link-active:focus {

color: #c13a3a;
border: 1px solid transparent;
border-bottom: 1px solid white;
background-color: transparent;
text-decoration: underline;

}

plain-react .tabs-1 .content {

padding: 15px;
border: 1px solid #868686;
border-top: 1px solid transparent;

}

plain-react .tabs-1 .tabcontent: {

}

/ Login Page css /

.Text-Field{

line-height: 20px; font-size: 10px; color: black; margin: 0px 60px; padding: 10px 0px;

}

.label{ display:inline-block; width: 100%; margin: 20px 0px; padding: 20px; background-color: rgba(237,156,156,0.5); font-size: 10px; }

input{ box-sizing: border-box; display:block; width: 100%; height: 40px; border-radius: 21px; border: solid 2px #e0e0e0; margin: 0px; padding: 0px 15px; font-size: 16px; background-color: #fff }

input:focus{ border: solid 2px #C13A3A; outline: none; background-color: #fff }

/ SignUp Page css /

to_main{

border: none; width: 135px; height: 19px; position: absolute; top: 20px; left: 30px; background: url("./login_logo.png") no-repeat; background-size: contain; } / 프로필 사진 크기 조정 / .PROFILEIMG{ width: 50px; }

p_img{

width: 200px; }

/ 일반적인 버튼 및 textarea등 태그에 대한 css / .bordered_textarea{ box-sizing: border-box; color: #999999; display:block; width: 100%; height: 40px; border-radius: 21px; border: solid 2px #e0e0e0; margin: 0px; padding: 6px 15px; font-size: 16px; }

hr{ color: rgb(237,30,39); }

img{ width: 700px; }

*{ margin: 0; padding: 0; }

.clear_fix{ overflow: auto; }

.reset_save a{ font-size: 12px; color: #ffff00;

}

/ ==================== [3] t-shirt design area ==================== /

/ ==================== [4] right help area ==================== / .help_area{ display: inline-block; background-color: #f1f1f1; padding: 6px 20px; text-align: center; position: absolute; top: 100px; right: 20px; }

.help_window_wrapper{ position: relative; }

.help_window{ visibility: hidden; padding: 9px 14px; position: absolute; top: -8px; right: 45px; width: 250px; background-color: #fff; border: 1px solid #CCCCCC; border-radius: 4px; box-shadow: 0 1px 9px 1px #CCCCCC; }

.help_window::before{ content: ""; position: absolute; top: 22px; right: -20px; margin-left: -5px; border-width: 10px; border-style: solid; border-color: transparent transparent transparent #555; }

.help_window p{ text-align: left; }

.help_window p span{ font-weight: bold; margin-left: 5px; }

/ ==================== [5] left design tool ==================== / .design_tool{ position: absolute; display: inline-block; top: 100px; left: 20px; border: 1px solid #CCCCCC; border-radius: 4px; box-shadow: 0 1px 9px 1px #CCCCCC; }

.design_tool ul{ list-style-type: none; margin: 0; padding: 0; width: 200px; background-color: #f1f1f1; }

.design_tool ul li { border-bottom: 1px solid #CCCCCC; }

.design_tool ul li:last-child { border-bottom: none; }

.design_tool ul li a { display: block; color: #000; padding: 8px 16px; text-decoration: none; }

.design_tool ul li a span{ margin-left: 16px; }

.design_tool .add_text{ position: relative; }

.text_tool_window{ padding: 9px 14px; visibility: hidden; position: absolute; top: -38px; left: 45px; width: 250px; background-color: #fff; border: 1px solid #CCCCCC; border-radius: 4px; box-shadow: 0 1px 9px 1px #CCCCCC; }

/ Popup arrow / .text_tool_window::before { content: ""; position: absolute; top: 45px; left: -15px; margin-left: -5px; border-width: 10px; border-style: solid; border-color: transparent #555 transparent transparent; }

/ Toggle this class - hide and show the popup / .help_area .show, .add_text .show { visibility: visible; -webkit-animation: fadeIn 1s; animation: fadeIn 1s; }

.help_area a, .help_area a:hover{ color: #000; text-decoration: none; }

/ animation (fade in the popup) / @-webkit-keyframes fadeIn { from {opacity: 0;} to {opacity: 1;} }

@Keyframes fadeIn { from {opacity: 0;} to {opacity:1 ;} }

.help_window .header, .text_tool_window .header{ border-bottom: 1px solid #9E9E9E; padding-bottom: 5px; } .help_window .title, .text_tool_window .title{ float: left; }

.help_window #close_help_window, .text_tool_window #close_window{ float: right; }

.text_tool_window .font_area{ float: left; }

.text_tool_window .color_area{ float: right; }

.font_area p, .color_area p, .font_style p{ margin-bottom: 10px; }

text_area, .wrapper,

.font_style, .font_size { margin-top: 25px; }

.text_tool_window #text_area{ overflow: hidden; height: 50px; width: 100%; padding: 5px; border-radius: 3px; border: 1px solid #BDBDBD; }

.text_tool_window select{ padding: 5px; background: none repeat scroll 0 0 #FFFFFF; border: 1px solid #9C9D98; border-radius: 3px; box-shadow: 0 2px 2px #CFD0CB inset, 0 2px 2px rgba(0, 0, 0, 0.2); }

.color_area input{ width: 20px; height: 30px; background: #fff; padding: 2px; border-radius: 3px; }

/ ==================== [6] front-back button section ==================== / .change_side{ text-align: center; margin-top: 20px; }

.change_side button{ background-color: #e7e7e7; color: black; border: 0; padding: 16px 32px; margin: 4px 2px; }

/ ==================== [7] product modal ==================== / .product_details{ float: left; width: 270px; text-align: center; }

.product_details img{ width: 250px; }

/ ==================== [8] preview image modal ==================== /

previewModal .modal-body{

text-align: center; }

previewModal .canvas_wrapper{

margin-bottom: 20px; }

previewModal .canvas-container{

margin: 0 auto; }

back_preview{

margin-top: 40px; margin-bottom: 40px; }

previewModal a,

previewModal a:hover{

text-decoration: none; color: #fff; background-color: #EF6C00; padding: 11px 16px; border-radius: 3px; }

previewModal a span{

margin-left: 5px; }

/ styles for tab browsers smaller than 800px; / @media (max-width: 800px){ .design_tool ul li a span{ display: none; } .design_tool ul{ width: auto; } }

/ Canvas /

canvas{

padding-left: 0; padding-right: 0; margin-left: auto; margin-right: auto; display: block; } .canvas-container{

padding-left: 0; padding-right: 0; margin-left: auto; margin-right: auto; display: block;

} .canvas-bg{

width: 430px; height: 460px; padding-left: 0; padding-right: 0; margin-left: auto; margin-right: auto; background: url('./images/bg-canvas.png'); background-repeat: repeat; border:1px solid #ececec;

}

canvas #front-canvas{ }

canvas #back-canvas{ }

.circle-picker{ margin-left: auto; margin-right: auto; }

/grouppage/

.SearchingBar { margin-bottom: 20px; }

.searching_input{ box-sizing: border-box; display:inline-block; width: 67%; height: 40px; border-radius: 21px; border: solid 2px #e0e0e0; margin: 0px; padding: 0px 15px; font-size: 16px; background-color: #fff }

.searching_button{ box-sizing: border-box; display:inline-block; width: 30%; height: 40px; padding: 0px 15px; margin-left: 10px;

}

.Group-List-Field{ box-sizing: border-box; color: black; }

.Group-List-Field > ul { padding: 0px; margin: 20px 0px; }

.Group-Button-Field{ box-sizing: border-box; font-size: 12px; color: black; margin: 10px 0px 10px 0px;

} .button_small{ width: 30%; height: 24px; display: inline-block; float: right; border: 1px solid #FFC50A; border-radius: 4px; box-shadow: 2px 3px 7px 0 rgba(148, 60, 208, 0.1); background-color: #FFB73B; color: #fff; }

.button_admin{ width: 100%; height: 20px; display: inline-block; float: right; border: 1px solid #dcdcdc; border-radius: 4px; box-shadow: 1px 2px 3px 0 rgba(160, 160, 160, 0.1); background-color: #fff; color: #ababab; }

SiennaHan commented 5 years ago

selector

/frontend/src/css 폴더 안에 넣으시면됩니다

SiennaHan commented 5 years ago

/tab/

plain-react .tabs {

width: 100%;
display: inline-block;
margin-right: 30px;
vertical-align: top;

}

plain-react .tabs-1 .tab-links {

margin: 0;
padding: 0;
box-shadow: 0px;
border: 1px solid #ccc;
border-bottom: 1px solid #868686;
height: 35px;
position: relative;
top: 5px;

}

plain-react .tabs-1 .tab-link {

width: 20%;
border-radius: 2px;
font-size: 13px;
margin: 2px 10px;
cursor: pointer;
border: 1px solid transparent;
color: #666;
box-shadow: none;
background: transparent;
display: inline;
position: relative;
height: 40px;
line-height: 41px;
top: -4px;
left: -1px;
outline: none;

}

plain-react .tabs-1 .tab-link:hover,

plain-react .tabs-1 .tab-link:focus {

color: #666464;

}

plain-react .tabs-1 .tab-link-active,

plain-react .tabs-1 .tab-link-active:hover,

plain-react .tabs-1 .tab-link-active:focus {

color: #c13a3a;
border: 1px solid transparent;
border-bottom: 1px solid white;
background-color: transparent;
text-decoration: underline;

}

plain-react .tabs-1 .content {

padding: 15px;
border: 1px solid #868686;
border-top: 1px solid transparent;

}

plain-react .tabs-1 .tabcontent: {

}

tmddk2709 commented 5 years ago
import React from 'react';
import {connect} from 'react-redux';
import {fabric} from 'fabric';
import {CirclePicker, SketchPicker} from 'react-color';
import {Tabs, TabContent, TabLink} from 'react-tabs-redux';
//import ThreeScene from './ThreeScene';
//import FabricCanvas from './FabricCanvas';
import MyGroupList from '../GroupPage/MyGroupList';
//import ImageUploader from 'react-images-upload';

import { toSaveDesign, toNewDesign } from '../../actions/index.js';
//import { tsImportEqualsDeclaration } from '@babel/types';

//import logo from './images/templates/templatelist';

class DesignPage extends React.Component {
    constructor(props){
        console.log("DesignPage - constructor")
        super(props);

        this.state = {
            design : {
                body: this.props.now_design.design.body,
                sleeve: this.props.now_design.design.sleeve,
                banding: this.props.now_design.design.banding,
                stripe: this.props.now_design.design.stripe,
                button: this.props.now_design.design.button
            },

            text: {
                frontchest: this.props.now_design.text.frontchest,
                rightarm: this.props.now_design.text.rightarm,
                upperback: this.props.now_design.text.upperback,
                middleback: this.props.now_design.text.middleback,
                lowerback: this.props.now_design.text.lowerback,
            },

            logo : {
                front: {
                    src : 'data:image/jpeg;base64,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',
                    left: 250,
                    top: 110,
                },
                arm_right: {
                    src : 'data:image/jpeg;base64,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',
                    left: 50,
                    top: 120,
                },
                arm_left: {
                    src : 'data:image/jpeg;base64,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',
                    left: 155,
                    top: 120,
                },
                back: {
                    src : 'data:image/jpeg;base64,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',
                    left: 135,
                    top: 125,
                },
            },

            image: {
                front: this.props.now_design.image.front,
                back: this.props.now_design.image.back,
            },

            element: null,
            designClickedWhat: "body",
            textClickedWhat: null,
            logoClickedWhat: null,

            displayTextColor: false,
            displayBorderColor: false,
        };

        this.handleElementChange = this.handleElementChange.bind(this);
        this.handleDesignChange = this.handleDesignChange.bind(this);
        this.handleTextChange = this.handleTextChange.bind(this);
        this.handleTextColorChange = this.handleTextColorChange.bind(this);
        this.handleStrokeColorChange = this.handleStrokeColorChange.bind(this);
        this.handleLogoChange = this.handleLogoChange.bind(this);

        this.designElementToImage = this.designElementToImage.bind(this);
        this.textElementToImage = this.textElementToImage.bind(this);
        this.logoElementToImage = this.logoElementToImage.bind(this);

        this.updateFrontCanvas = this.updateFrontCanvas.bind(this);
        this.updateBackCanvas = this.updateBackCanvas.bind(this);

        this.clickedDesignPopButton = this.clickedDesignPopButton.bind(this);
        this.clickedTextPopButton = this.clickedTextPopButton.bind(this);
        this.clickedLogoPopButton = this.clickedLogoPopButton.bind(this);

        this.moveHandler = this.moveHandler.bind(this);
        this.onClickSave = this.onClickSave.bind(this);

        this.getDataUrl = this.getDataUrl.bind(this);

    }

    componentWillMount() {
        console.log("DesignPage - componentWillMount")
        this.design_color = {
            body: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
                "#097c25", "#0075a9", "#601986", "#580b0b", "#cfcfcf", "#626262", "#001c58", "#232323"],
            sleeve: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
                "#097c25", "#0075a9", "#601986", "#580b0b", "#fcfcfc", "#626262", "#001c58", "#232323"],
            stripe: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
                "#097c25", "#0075a9", "#601986", "#580b0b", "#fcfcfc", "#cfcfcf", "#001c58", "#232323"],
            banding: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
                "#097c25", "#0075a9", "#601986", "#580b0b", "#cfcfcf", "#626262", "#001c58", "#232323"],
            button: ["#f29c9f", "#fff45c", "#80c269", "#00b7ee", "#aa89bd", "#910000", "#f39800",
                "#097c25", "#0075a9", "#601986", "#580b0b", "#fcfcfc", "#cfcfcf", "#001c58", "#232323"]
        }

        this.design_element = ["body", "sleeve", "stripe", "banding", "button"]
        this.text_element = ["frontchest", "rightarm", "upperback", "middleback", "lowerback"]
        this.logo_element = ["front", "arm_right", "arm_left", "back"]
    }

    componentDidMount() {
        console.log("DesignPage - componentDidMount")

        this.the_front_canvas = new fabric.Canvas('front-canvas', {
            preserveObjectStacking: true,
            height:460,
            width:430,
        });

        this.the_back_canvas = new fabric.Canvas('back-canvas', {
            preserveObjectStacking: true,
            height:460,
            width:430,
        });

        this.the_front_canvas.on({
            'object:moved': this.moveHandler,
        })

        this.the_back_canvas.on({
            'object:moved': this.moveHandler,
        })

        this.the_front_canvas.add(this.designElementToImage(this.state.design.body, "front_body", 0))
        this.the_back_canvas.add(this.designElementToImage(this.state.design.body, "back_body", 0))
        this.the_front_canvas.add(this.designElementToImage(this.state.design.sleeve, "front_sleeve", 0))
        this.the_back_canvas.add(this.designElementToImage(this.state.design.sleeve, "back_sleeve", 0))
        this.the_front_canvas.add(this.designElementToImage(this.state.design.banding, "front_banding", 0))
        this.the_back_canvas.add(this.designElementToImage(this.state.design.banding, "back_banding", 0))
        this.the_front_canvas.add(this.designElementToImage(this.state.design.stripe, "front_stripe", 3))
        this.the_back_canvas.add(this.designElementToImage(this.state.design.stripe, "back_stripe", 3))
        this.the_front_canvas.add(this.designElementToImage(this.state.design.button, "front_button", 3))

        this.the_front_canvas.add(this.textElementToImage(this.state.text.frontchest, "frontchest"))
        this.the_front_canvas.add(this.textElementToImage(this.state.text.rightarm, "rightarm"))
        this.the_back_canvas.add(this.textElementToImage(this.state.text.upperback, "upperback"))
        this.the_back_canvas.add(this.textElementToImage(this.state.text.middleback, "middleback"))
        this.the_back_canvas.add(this.textElementToImage(this.state.text.lowerback, "lowerback"))

        this.the_front_canvas.add(this.logoElementToImage(this.state.logo.front, "front"))
        this.the_front_canvas.add(this.logoElementToImage(this.state.logo.arm_right, "arm_right"))
        this.the_back_canvas.add(this.logoElementToImage(this.state.logo.arm_left, "arm_left"))
        this.the_back_canvas.add(this.logoElementToImage(this.state.logo.back, "back"))

    }

    componentWillUpdate = (nextProps, nextState) => {
        console.log("DesignPage - componentWillUpdate nextState: ", nextState)

        // If Updated Item is not the same as the old one
        //         => Update the canvas with newer item

        //update for design element
        for(let element of this.design_element){
            if(nextState.design[element] !== this.state.design[element]) {
                if(element === "stripe" ) {
                    this.updateFrontCanvas(this.designElementToImage(nextState.design[element], 'front_'+element, 3))
                    this.updateBackCanvas(this.designElementToImage(nextState.design[element], 'back_'+element, 3))
                }
                else if (element === "button") {
                    this.updateFrontCanvas(this.designElementToImage(nextState.design[element], 'front_'+element, 3))
                }
                else {
                    this.updateFrontCanvas(this.designElementToImage(nextState.design[element], 'front_'+element, 0))
                    this.updateBackCanvas(this.designElementToImage(nextState.design[element], 'back_'+element, 0))
                }
            }
        }

        //update for text element
        for(let element of this.text_element){
            if(nextState.text[element] !== this.state.text[element]) {
                if(element === "frontchest" || element === "rightarm") {
                    this.updateFrontCanvas(this.textElementToImage(nextState.text[element], element))
                }
                else {
                    this.updateBackCanvas(this.textElementToImage(nextState.text[element], element))
                }
            }
        }

        //update for logo element
        for (let element of this.logo_element) {
            if(nextState.logo[element] !== this.state.logo[element]) {
                if(element === "front" || element === "arm_right"|| element === "arm_left") {
                    this.updateFrontCanvas(this.logoElementToImage(nextState.logo[element], element))
                }
                else {
                    this.updateBackCanvas(this.logoElementToImage(nextState.logo[element], element))
                }
            }
        }

        this.the_front_canvas.renderAll();
        this.the_back_canvas.renderAll();

    }

    // componentDidUpdate(nextProps, nextState) {
    //     this.the_front_canvas.renderAll();
    //     this.the_back_canvas.renderAll();
    // }

    handleElementChange(e){
        console.log("DesignPage - handleElementChange target: ", e.target)
        let id = e.target.id;
        let value = e.target.value;

        if(id === "design_element") {
            this.setState({designClickedWhat: value});
        }
        else if(id === "text_element") {
            this.setState({textClickedWhat: value});
        }
        else if (id == "logo_element") {
            this.setState({logoClickedWhat: value});
        }
    }

    handleDesignChange(color) {
        console.log("DesignPage - handleDesignChange")
        let design_element = document.getElementById("design_element").value;

        this.setState({design : ({...this.state.design, [design_element]: color.hex})})
    }

    handleTextChange(e) {
        let text_element = document.getElementById("text_element").value;
        console.log("DesignPage - handleTextChange e.target: ", e.target, " text element: ", text_element)

        this.setState({text : ({...this.state.text, 
            [text_element]: ({...this.state.text[text_element], [e.target.name]:e.target.value})
        })});
    }

    handleTextColorChange(color) {
        let text_element = document.getElementById("text_element").value;
        console.log("DesignPage - handleTextColorChange", color)

        this.setState({text : ({...this.state.text, 
            [text_element]: ({...this.state.text[text_element], fill: color.hex})
        })});
    }

    handleStrokeColorChange(color) {
        let text_element = document.getElementById("text_element").value;
        console.log("DesignPage - handleTextColorChange", color)

        this.setState({text : ({...this.state.text, 
            [text_element]: ({...this.state.text[text_element], stroke: color.hex})
        })});
    }

    // componentDidUpdate(nextProps, nextState) {
    //     this.the_front_canvas.renderAll();
    //     this.the_back_canvas.renderAll();
    // }

    handleLogoChange = (e) => {
        e.preventDefault();
        let logo_element = document.getElementById("logo_element").value;
        const scope = this;
        //var img = document.createElement("img");
        var file = document.getElementById('input').files[0];
        let reader = new FileReader();
        reader.addEventListener("load", function() {
            //var image= new Image();
            //image.src = reader.result;
            console.log(reader.result);
            scope.setState({logo: ({...scope.state.logo, 
                [logo_element]: ({...scope.state.logo[logo_element], src :reader.result})
            }) });

        })

        if (file) {
            reader.readAsDataURL(file);
        }
    }

    getDataUrl = (img) => {
        var canvas = document.createElement('canvas')
        var ctx = canvas.getContext('2d')

        canvas.width = img.width
        canvas.height = img.height
        ctx.drawImage(img, 0, 0)

        // If the image is not png, the format
        // must be specified here
        return canvas.toDataURL()
    }

    designElementToImage(color, type, z_Index) {
        console.log("DesignPage - designElementToImage - color: ", color, "type: ", type)

        var imgElement = document.createElement("img");

        const scope = this
        imgElement.addEventListener('load', function(event){
            var dataUrl = scope.getDataUrl(event.currentTarget)
            var img = document.createElement("img");
            img.src = dataUrl;
            var imgInstance = new fabric.Image(img, {
                width: 430,
                height: 460,
                the_type: type                                                         ,
                zIndex: z_Index
            });
            scope.setState({element: imgInstance});
        })

        var src = './images/templates/' + type + '/' + type + color.substring(1)+'.png';

        // console.log("src: ", src)
        imgElement.setAttribute("src", require(src));
        // console.log(this.state.element);
        var imgInstance = new fabric.Image(imgElement, {
            width: 430,
            height: 460,
            the_type: type                                                         ,
            zIndex: z_Index
        });

        return imgInstance;

    }

    textElementToImage(text, type) {
        console.log("DesignPage - textElementToImage", text, type)

        // const scope = this
        // imgElement.addEventListener('load', function(event){
        //  var dataUrl = scope.getDataUrl(event.currentTarget)
        //  var img = document.createElement("img");
        //  img.src = dataUrl;
        //  var imgInstance = new fabric.Image(img, {
        //      width: 430,
        //      height: 460,
        //      the_type: type                                                         ,
        //      zIndex: z_Index
        //  });
        //  scope.setState({element: imgInstance});
        // })
        let imgInstance = new fabric.IText(text.textvalue, {
            fontFamily: text.fontFamily,
            fill: text.fill,
            fontStyle: text.fontStyle,
            fontSize: text.fontSize,
            stroke: text.stroke,
            strokeWidth: text.strokeWidth,
            the_type: type,
            zIndex: 10,
            left: text.left,
            top: text.top,
            textAlign: "center"
        })

        // console.log("text imgInstance: ", imgInstance)
        return imgInstance;
    }

    logoElementToImage(logo, type) {
        console.log("FabricCanvas - textElementToImage")

        //let img = document.createElement("img");
        //img.setAttribute("src", require(logo.src));
        let img = new Image();
        img.src = logo.src;

        let imgInstance;
        imgInstance = new fabric.Image(img, {
            width: 899,
            height:959,
            the_type: type,
            zIndex: 10,
            left: logo.left,
            top: logo.top
        });
        imgInstance.set({
            scaleY: 0.1,
            scaleX: 0.1,
            originX: "center",
            originY: "center"
        });

        return imgInstance;
    }

    updateFrontCanvas = (next) => {
        console.log("DesignPage - updateFrontCanvas next: ", next)

        if(next){
            let to_remove;
            // Find the same kind of element
            this.the_front_canvas.forEachObject( (object) => {

                if(object.the_type === next.the_type){
                    console.log("obcject.the_type: ", object.the_type, " next.the_type: ", next.the_type)
                    to_remove = object;
                    this.the_front_canvas.remove(to_remove);
                }
            } );

            this.the_front_canvas.add(next);
            this.the_front_canvas.moveTo(next, next.zIndex);
            this.the_front_canvas.renderAll();
        }
    }

    updateBackCanvas = (next) => {
        console.log("DesignPage - updateBackCanvas next: ", next)

        if(next){

            let to_remove;
            // Find the same kind of element
            this.the_back_canvas.forEachObject( (object) => {

                if(object.the_type === next.the_type){
                    to_remove = object;
                    this.the_back_canvas.remove(to_remove);
                }
            } );

            this.the_back_canvas.add(next);
            this.the_back_canvas.moveTo(next, next.zIndex);
            this.the_back_canvas.renderAll();
        }
    }

    clickedDesignPopButton = () => {
        console.log("clicked", this.state.designClickedWhat)
        this.state.designClickedWhat 
            ? this.setState({designClickedWhat: null})
            : this.setState({designClickedWhat: "body"});
    }
    clickedTextPopButton = () => {
        this.state.textClickedWhat 
            ? this.setState({textClickedWhat: null})
            : this.setState({textClickedWhat: "frontchest"});
    }

    clickedLogoPopButton = () => {
        this.state.logoClickedWhat 
            ? this.setState({logoClickedWhat: null})
            : this.setState({logoClickedWhat: "front"});
    }

    moveHandler = (e) =>{
        let movingObject = e.target;
        console.log(movingObject)
        console.log("left: ", movingObject.get('left'), " top: ", movingObject.get('top'))

        this.setState({text : ({...this.state.text, 
            [movingObject.the_type]: ({...this.state.text[movingObject.the_type],
                left:movingObject.get('left'),
                top: movingObject.get('top')})
        })});
    }

    saveToCanvas = () => {
        console.log("DesignPage - saveToCanvas")

        let link = document.createElement("a");
        link.href = this.the_canvas.toDataURL({format: 'png'});
        link.download = "design.png";
        link.click();

    }

    fileChangedHandler = (event) => {
        const file = event.target.files[0];
        this.setState({selectedFile: file});
    }

    onClickSave = () => {
        console.log("clickSave")
        let image = {
            front: this.the_front_canvas.toDataURL({format:'png'}),
            back: this.the_back_canvas.toDataURL({format: 'png'})
        }

        this.setState({image: image})
        this.props.onSave(this.props.now_design.id, this.state.design, this.state.text, image)
    }

    render() {
        console.log("DesignPage - render state: ", this.state)
        const designClickedWhat = this.state.designClickedWhat;
        const textClickedWhat = this.state.textClickedWhat;
        const logoClickedWhat = this.state.logoClickedWhat;

        let colorPicker;
        let textPicker;
        let logoPicker;

        const popover = {
            position: 'absolute',
            zIndex: '2',
          }

        const cover = {
            position: 'fixed',
            top: '0px',
            right: '0px',
            bottom: '0px',
            left: '0px',
        }

        colorPicker = designClickedWhat 
            ? <center>
                <select id="design_element" onChange={(e)=>this.handleElementChange(e)}>
                    <option value = "body">body</option>
                    <option value = "sleeve">sleeve</option>
                    <option value = "banding">banding</option>
                    <option value = "stripe">stripe</option>
                    <option value = "button">button</option>
                </select>
                <br/><br/>
                <CirclePicker width="220" id="design_colour" 
                    onChangeComplete={this.handleDesignChange} colors={this.design_color[designClickedWhat]}/>
                <br/>
            </center>
            : <div />

        textPicker = textClickedWhat
            ? <center>
                    <select id="text_element" onChange={(e)=>this.handleElementChange(e)}>
                        <option value="frontchest">Front Chest</option>
                        <option value="rightarm">Right Arm</option>
                        <option value="upperback">Upper Back</option>
                        <option value="middleback">Middle Back</option>
                        <option value="lowerback">Lower Back</option>
                    </select>

                    <textarea id="text_area" placeholder={this.state.text[this.state.textClickedWhat].textvalue} 
                        name="textvalue" onChange={(e)=>this.handleTextChange(e)}/>

                    <p>Font</p> 
                    <select id="text_font" name="fontFamily" onChange={(e)=>this.handleTextChange(e)}>
                        <option>arial</option>
                        <option>tahoma</option>
                        <option>times new roman</option>
                        <option>anton</option>
                        <option>Akronim</option>
                        <option>Alex Brush</option>
                        <option>Aguafina Script</option>
                        <option>mistral</option>
                    </select>

                    <p>Style</p>
                    <select id="text_style" name="fontStyle" onChange={(e)=>this.handleTextChange(e)}>
                        <option>normal</option>
                        <option>italic</option>
                        <option>oblique</option>
                        <option>bold</option>
                    </select>

                    <p>Size</p> 
                    <input type="range"  min="0" max="200" defaultValue="100" id="text_size" 
                        name="fontSize" onChange={(e)=>this.handleTextChange(e)}/>

                    <p>Color</p>
                    <div onClick={()=>{this.setState({displayTextColor: !this.state.displayTextColor})}}>
                        <button>pick color</button>
                    </div> 
                    { this.state.displayTextColor ? <div style={popover}> <div style={cover} onClick={()=>{this.setState({displayTextColor: false})}}/>
                        <SketchPicker color={ this.state.text[document.getElementById("text_element").value].fill } onChange={this.handleTextColorChange} />
                    </div> : null }

                    <p>Border</p>
                    <input type="range"  min="0" max="10" defaultValue="2" id="stroke_width" 
                        name="strokeWidth" onChange={(e)=>this.handleTextChange(e)}/>
                    <div onClick={()=>{this.setState({displayBorderColor: !this.state.displayBorderColor})}}>
                        <button>pick color</button>
                    </div> 
                    { this.state.displayBorderColor ? <div style={popover}> <div style={cover} onClick={()=>{this.setState({displayBorderColor: false})}}/>
                        <SketchPicker color={ this.state.text[document.getElementById("text_element").value].stroke } onChange={this.handleStrokeColorChange} />
                    </div> : null }
            </center>
        : <div/>

      logoPicker = logoClickedWhat 
            ? <center>
                <select id="logo_element" onChange={(e)=>this.handleElementChange(e)}>
                                <option value="front">Front Chest</option>
                                <option value="arm_right">Right Arm</option>
                                <option value="arm_left">Left Arm </option>
                                <option value="back">Lower Back</option>
                </select>
                <input type = "file" id = "input" onChange = {this.handleLogoChange} />
            </center> 
            : <div/>

        return (
        <section className="wrap clear col3">

            {/*<!--========================================
                LEFT SIDE BAR
            =========================================-->*/} 
            <div className="aside">
                <h2 className="h_white">SELECT STYLE</h2>

                <div className="content">

                    {/*<!--========================================
                        Design section
                    =========================================-->*/}
                    <h1>Design</h1>
                    <button onClick={this.clickedDesignPopButton}>pop</button>
                    {colorPicker}

                    {/*<!--========================================
                        Text section
                    =========================================-->*/} 
                    <h1>Text</h1>
                    <button onClick={this.clickedTextPopButton}>pop</button>
                    {textPicker}

                    {/*<!--========================================
                        Image Upload Section
                    =========================================-->*/}
                    <h1>Logo</h1>
                    <button onClick={this.clickedLogoPopButton}>pop</button>
                    {logoPicker}

                </div>
            </div>

            {/*<!--========================================
                CENTER DESIGN SECTION
            =========================================-->*/} 
            <div className="main">
                <h2 className="h_white">SAMPLE VIEW</h2>
                <div className="content">

                    {/*<!--========================================
                        Fabric Canvas Section
                    =========================================-->*/}
                    {/*<ThreeScene/>*/}
                    <div className= "main-canvas-container">
                        <button class="front_btn" type="button">Front</button>
                        <canvas id='front-canvas'/>

                        <button class="back_btn" type="button">Back</button>
                        <canvas id='back-canvas'/>
                    </div>

                    {/*<!--========================================
                        NEW & SAVE Button Section
                    =========================================-->*/}
                    {this.props.isLoggedIn ?
                        (<div>
                            <button className="new_btn" type="button" onClick={() => this.props.onNew()}>NEW</button>
                            {/* <button className="save_btn" type="button" onClick={() => this.props.onSave(this.props.now_design.id, this.state.design, this.state.text)}>SAVE</button> */}
                            <button className="save_btn" type="button" onClick={() => this.onClickSave()}>SAVE</button>
                        </div>)
                        : <div>
                            <button className="new_btn" type="button" onClick={() => this.props.onNew()}>NEW</button>
                        </div>
                    }
                </div>
            </div>

            {/*<!--========================================
                RIGHT SIDE BAR
            =========================================-->*/} 
            <div className="aside">
                <h2 className="h_black">MY GROUP</h2>
                <div className="content">
                    {this.props.isLoggedIn? <MyGroupList /> : <p>로그인을 해주세요</p>}
                </div>
            </div>
        </section>
        );
    }
}

const mapStateToProps = (state) => ({
    isLoggedIn: state.authorization,
    now_design: state.now_design,
    my_groups: state.my_groups,
})

const mapDispatchToProps = (dispatch) => ({
    onNew: () => dispatch(toNewDesign()),
    onSave: (designid, design, text, image) => dispatch(toSaveDesign(designid, design, text, image)),
})

export default connect (mapStateToProps, mapDispatchToProps)(DesignPage)
SiennaHan commented 5 years ago

<!!!!!link href="https://fonts.googleapis.com/css?family=Bree+Serif|Noto+Sans+KR|Alfa+Slab+One|Damion|Teko:500&display=swap" rel="stylesheet">