Salesforce LWC學習(三十一) Quick Action適配

zero.zhang發表於2021-03-03

本篇參考:https://www.lightningdesignsystem.com/components/modals/

隨著salesforce lwc的優化,越來越多的專案從aura轉到了lwc開發,沒有lwc的知識是不能的,但是指望lwc可以搞定所有的場景是萬萬不能的,比如今天的場景,quick action。目前 quick action只允許選擇 Aura Component,所以我們開發 quick action基本操作是 aura 套著 lwc實現功能。那如何更好的適配UI,本篇淺入淺出,做一些特定場景的demo,以便有需求的小夥伴可以快速參考上手。先來一個簡單的demo。

quickActionLwcAdjustment.html

<template>
    this is a component build by LWC
</template>

testQuickActionForLWC.cmp

<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId,flexipage:availableForRecordHome,lightning:actionOverride">
    <aura:attribute name="recordId" type="Id"/>
    <c:quickActionLwcAdjustment/>
</aura:component>

將這個aura component配在 quick action中,我們demo中放在了account裡面

 

 展示效果:

 嗯,實現了,目測沒啥問題。但是總覺怪怪的,因為彈出的 Modal沒有header,沒有footer,但是大部分彈出的需要這些內容,所以,OK,我們繼續往下探索,加一下header 以及 footer,demo中 header / footer放在lwc中。

1.0版改動嘗試

quickActionLwcAdjustment.html

<template>
    <div class="slds-modal slds-fade-in-open" style="width: 100%;">
        <div class="slds-modal__container" style="width:100%;">
            <header class="slds-modal__header">
                <h2 class="title slds-text-heading--medium slds-hyphenate">header title section</h2>
            </header>
            <div class="slds-modal__content slds-p-around--medium">
                <lightning-card style="text-align:center;">
                    <p class="title slds-text-heading--medium slds-hyphenate">this is a component build by LWC</p>
                </lightning-card>
            </div>

            <div class="slds-modal__footer">
                <lightning-button onclick={handleOKClick} variant="brand" label="OK" class="slds-m-right_x-small slds-no-flex text-right slds-float--right"></lightning-button>
            </div>
        </div>
    </div>
</template>

quickActionLwcAdjustment.js

import { LightningElement } from 'lwc';

export default class QuickActionLwcAdjustment extends LightningElement {
    handleOKClick(event) {
        this.dispatchEvent(new CustomEvent('closemodal'));
    }
}

testQuickActionFowLWC.cmp

<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId,flexipage:availableForRecordHome,lightning:actionOverride">
    <aura:attribute name="recordId" type="Id"/>
    <c:quickActionLwcAdjustment onclosemodal="{!c.refreshAndCloseModal}"/>
</aura:component>

testQuickActionForLWCController.js

({
    refreshAndCloseModal : function(component, event, helper) {
        $A.get('e.force:refreshView').fire();
        $A.get("e.force:closeQuickAction").fire();
    }
})

效果展示:

儘管還有點醜,但是雛形出來了,做一下適配。

2.0版改動嘗試

testQuickActionForLWC上面加一下的樣式

<aura:html tag="style">
        .slds-modal__content {
            height:unset !important;
            max-height:unset !important;
        }
</aura:html>

儘管整體效果挺好,但是關閉的按鈕卻沒有頂上去,所以沒法作為最終版本,我們通過樣式把關閉按鈕隱藏,使用lwc展示

 3.0版改動嘗試

testQuickActionForLWC.cmp

<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId,flexipage:availableForRecordHome,lightning:actionOverride">
    <aura:html tag="style">
        .slds-modal__close {
            display: none;
        }

        .slds-modal__content {
            height:unset !important;
            max-height:unset !important;
        }
    </aura:html>
    <aura:attribute name="recordId" type="Id"/>
    <c:quickActionLwcAdjustment onclosemodal="{!c.refreshAndCloseModal}"/>
</aura:component>

quickActionLwcAdjustment.html

<template>
    <div class="slds-modal slds-fade-in-open" style="width: 100%;">
        <div class="slds-modal__container" style="width:100%;">
            <header class="slds-modal__header inner">
                <h2 class="title slds-text-heading--medium slds-hyphenate">header title section</h2>
                <lightning-button-icon class="slds-button slds-button_icon slds-modal__close slds-button_icon-inverse"
                    icon-name="utility:close"  alternative-text="close" title="close" onclick={handleOKClick}>
                </lightning-button-icon>
            </header>
            <div class="slds-modal__content slds-p-around--medium">
                <lightning-card style="text-align:center;">
                    <p class="title slds-text-heading--medium slds-hyphenate">this is a component build by LWC</p>
                </lightning-card>
            </div>

            <div class="slds-modal__footer">
                <lightning-button onclick={handleOKClick} variant="brand" label="OK" class="slds-m-right_x-small slds-no-flex text-right slds-float--right"></lightning-button>
            </div>
        </div>
    </div>
</template>

quickActionLwcAdjustment.css:做一個派生選擇器,先隱藏整體,然後指定css下子樣式展示

.inner .slds-modal__close {
    display: inline !important;
}

顯示效果如下:

總結: 這個demo現在還有瑕疵,quick action展示的關閉按鈕是白色,這個是透明色。本篇拋磚引玉,大神們類似需求如何實現,歡迎留言和討論。篇中有錯誤歡迎指出,有不懂歡迎留言。

相關文章