0.0.2 • Published 3 years ago

pam-builder v0.0.2

Weekly downloads
-
License
-
Repository
-
Last release
3 years ago

Template Builder

How to use plugin

Build Package (Include Store) 1. Run Command

yarn add pam-builder
  1. Run Command
yarn dev

or

npm run dev
  1. Setup Data To Local Storage
    get storageBaseUrl() {
        return <YOUR_STORAGE_BASEURL>
    }

    get storageToken() {
        return <YOUR_PERSONALIZE_TOKEN>
    }

    [Optional]
    get personalizeBaseUrl() {
        return <YOUR_PERSONALIZE_BASEURL>
    }

    get personalizeToken() {
        return <YOUR_PERSONALIZE_TOKEN>
    }

    created() {
        if (process.client) {
            localStorage['storage-baseurl'] = this.storageBaseUrl
            localStorage['storage-token'] = this.storageToken

            [Optional]
            localStorage['personalize-baseurl'] = this.personalizeBaseUrl
            localStorage['personalize-token'] = this.personalizeToken
        }
    }
attributevaluetypedescription
storageBaseUrlup to youstringfor get or upload image (ex. GET <BASEURL>/galleries, POST <BASEURL>/uploader/public
storageTokenup to youstringfor access api get or upload image
personalizeBaseUrl (optional)up to youstringfor get personalize (ex. GET <BASEURL>/customers/attributes)*
personalizeToken (optional)up to youstringfor access api get personalize
  1. Import Module And Create Instance Vue Component
    [Vue]
    mounted() {
        const builder: any = require('~/node_modules/vue-builder-plugin/src/plugins/Module')
        const store =  builder.default.store
        const router = builder.default.router
        const self = this
        new Vue({
            router,
            store,
            render: (h) =>
                h(builder.default.component, {
                    props: {
                        propTemplateJson: this.propTemplateJson,
                        propMessageType: this.propMessageType
                    },
                    on: {
                        change(templateJson: any) {
                            self.$emit('change', (templateJson && !_.isEmpty(templateJson) ? templateJson : {}))
                        }
                    }
                })
        }).$mount(`#${this.id}`)
    }

    [Nuxt.js]
    mounted() {
        if (process.client) {
            const builder: any = require('~/node_modules/vue-builder-plugin/src/plugins/Module')
            const store =  builder.default.store
            const router = builder.default.router
            const self = this
            new Vue({
                router,
                store,
                render: (h) =>
                    h(builder.default.component, {
                        props: {
                            propTemplateJson: this.propTemplateJson,
                            propMessageType: this.propMessageType
                        },
                        on: {
                            change(templateJson: any) {
                                self.$emit('change', (templateJson && !_.isEmpty(templateJson) ? templateJson : {}))
                            }
                        }
                    })
            }).$mount(`#${this.id}`)
        }
    }
attributevaluetypedescription
idup to youstringfor create element (default: builder). Mutiple element should be setup difference name
store--for use store in builder component module
router--for use router in builder component module
propTemplateJsonup to youobjectfor setup default prop your template json (pass to builder module)
propMessageTypeEMAIL, WEB_ATTENTION, FLEX_MESSAGEstringfor setup default prop your message type (EMAIL: result mjml, WEB_ATTENTION: result html, FLEX_MESSAGE: result line flex message)
this.builderup to youanyfor save vue instance data (parameter in your component)
render-functionfor render component
change(templateJson: any)-functionfor pass updated data from child (module component) to parent (your component) component
.$mount(#${this.id})--for create instance vue
  1. Use Component
    <div id="builder" />
attributevaluetypedescription
idup to youstringfor create element (default: builder). Mutiple element should be setup difference name
  1. Import Style To Component
    <style lang="scss">
        @import '~/node_modules/vue-builder-plugin/src/assets/scss/Main.scss';
        @import '~/node_modules/vue-builder-plugin/src/assets/css/quill.core.css';
        @import '~/node_modules/vue-builder-plugin/src/assets/css/quill.snow.css';
    </style>
  1. Access Builder Instance Directive From Outside
    (window as any).$el.__vue__.<YOUR_DIRECTIVE(DATA, PROPS, METHODS, ...)>

    such as
        (window as any).$el.__vue__.onUpdateScreen({
            mobile: this.isMobileActive,
            desktop: this.isFullsceenActive,
            width: {
                type: this.propWidthScreenType,
                size: this.propWidthScreenSize
            }
        })
attributevaluetypedescription
isMobileActivetrue, falsebooleanfor set up screen (if value is true you can view on mobile screen only)
isFullsceenActivetrue, falsebooleanfor set up screen (if value is true you can view on desktop screen only)
width{ type: string, size: string }objectfor set up width and type screen (if you set value you still edit builder)
propWidthScreenTypeSM, MD, LG, FULL, CUSTOMstringfor set up screen type (SM: 30%, MD: 70%, LG: 50%, FULL: 100%, CUSTOM: up to you, DEFAULT: 90%)
propWidthScreenSizenumber of percent (ex. 25%)stringfor set up screen custom

Project setup

yarn install

Compiles and hot-reloads for development

yarn dev

Compiles and minifies for production

yarn build:ts

Lints and fixes files

yarn lint

Customize configuration

See Configuration Reference.