Componentes fijos editables

IMPORTANT
El editor de SPA ha quedado obsoleto para nuevos proyectos. Sigue siendo compatible con Adobe para los proyectos existentes, pero no debe utilizarse para nuevos proyectos. Los editores preferidos para administrar contenido en AEM ahora son:

Los componentes de React editables pueden ser "fijos" o codificados en las vistas de la SPA. Esto permite a los desarrolladores colocar componentes compatibles con el Editor de SPA en las vistas de SPA y a los usuarios crear el contenido de los componentes en el Editor de SPA de AEM.

Componentes fijos

En este capítulo, reemplazamos el título de la vista Inicio, "Aventuras actuales", que es texto codificado en Home.js con un componente de título fijo pero editable. Los componentes fijos garantizan la colocación del título, pero también permiten crear el texto del título y cambiarlo fuera del ciclo de desarrollo.

Actualización de la aplicación WKND

Para agregar un componente Fixed a la vista Inicio:

  • Cree un componente de título editable personalizado y regístrelo en el tipo de recurso Título del proyecto
  • Coloque el componente Título editable en la vista Inicio de la SPA

Crear un componente de título de React editable

En la vista Inicio de la SPA, reemplace el texto predefinido <h2>Current Adventures</h2> por un componente de título editable personalizado. Para poder utilizar el componente Título, debemos hacer lo siguiente:

  1. Crear un componente React de título personalizado
  2. Decore el componente Título personalizado con los métodos de @adobe/aem-react-editable-components para que se pueda editar.
  3. Registre el componente de título editable con MapTo para que pueda usarse en componente contenedor más adelante.

Para ello, haga lo siguiente:

  1. Abrir proyecto de SPA remoto en ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app en su IDE

  2. Crear un componente de React en react-app/src/components/editable/core/Title.js

  3. Agregue el siguiente código a Title.js.

    code language-javascript
    import React from 'react'
    import { RoutedLink } from "./RoutedLink";
    
    const TitleLink = (props) => {
    return (
        <RoutedLink className={props.baseCssClass + (props.nested ? '-' : '__') + 'link'}
            isRouted={props.routed}
            to={props.linkURL}>
        {props.text}
        </RoutedLink>
    );
    };
    
    const TitleV2Contents = (props) => {
        if (!props.linkDisabled) {
            return <TitleLink {...props} />
        }
    
        return <>{props.text}</>
    };
    
    export const Title = (props) => {
        if (!props.baseCssClass) {
            props.baseCssClass = 'cmp-title'
        }
    
        const elementType = (!!props.type) ? props.type.toString() : 'h3';
        return (<div className={props.baseCssClass}>
            {
                React.createElement(elementType, {
                        className: props.baseCssClass + (props.nested ? '-' : '__') + 'text',
                    },
                    <TitleV2Contents {...props} />
                )
            }
    
            </div>)
    }
    
    export const titleIsEmpty = (props) => props.text == null || props.text.trim().length === 0
    

    Tenga en cuenta que este componente de React aún no se puede editar con AEM SPA Editor. Este componente base se podrá editar en el siguiente paso.

    Lea los comentarios del código para obtener más información sobre la implementación.

  4. Crear un componente de React en react-app/src/components/editable/EditableTitle.js

  5. Agregue el siguiente código a EditableTitle.js.

    code language-javascript
    // Import the withMappable API provided bu the AEM SPA Editor JS SDK
    import { EditableComponent, MapTo } from '@adobe/aem-react-editable-components';
    import React from 'react'
    
    // Import the AEM the Title component implementation and it's Empty Function
    import { Title, titleIsEmpty } from "./core/Title";
    import { withConditionalPlaceHolder } from "./core/util/withConditionalPlaceholder";
    import { withStandardBaseCssClass } from "./core/util/withStandardBaseCssClass";
    
    // The sling:resourceType of the AEM component used to collected and serialize the data this React component displays
    const RESOURCE_TYPE = "wknd-app/components/title";
    
    // Create an EditConfig to allow the AEM SPA Editor to properly render the component in the Editor's context
    const EditConfig = {
        emptyLabel: "Title",        // The component placeholder in AEM SPA Editor
        isEmpty: titleIsEmpty,      // The function to determine if this component has been authored
        resourceType: RESOURCE_TYPE // The sling:resourceType this component is mapped to
    };
    
    export const WrappedTitle = (props) => {
        const Wrapped = withConditionalPlaceHolder(withStandardBaseCssClass(Title, "cmp-title"), titleIsEmpty, "TitleV2")
        return <Wrapped {...props} />
    }
    
    // EditableComponent makes the component editable by the AEM editor, either rendered statically or in a container
    const EditableTitle = (props) => <EditableComponent config={EditConfig} {...props}><WrappedTitle /></EditableComponent>
    
    // MapTo allows the AEM SPA Editor JS SDK to dynamically render components added to SPA Editor Containers
    MapTo(RESOURCE_TYPE)(EditableTitle);
    
    export default EditableTitle;
    

    Este componente de React EditableTitle ajusta el componente de React Title, ajustándolo y decorándolo para que pueda editarse en el Editor de SPA de AEM.

Uso del componente React EditableTitle

Ahora que el componente React Título editable está registrado en y disponible para usar en la aplicación React, reemplace el texto de título predefinido en la vista Inicio.

  1. Editar react-app/src/components/Home.js

  2. En Home(), en la parte inferior, importe EditableTitle y reemplace el título predefinido por el nuevo componente AEMTitle:

    code language-javascript
    ...
    import EditableTitle from './editable/EditableTitle';
    ...
    function Home() {
        return (
            <div className="Home">
    
            <EditableTitle
                pagePath='/content/wknd-app/us/en/home'
                itemPath='root/title'/>
    
                <Adventures />
            </div>
        );
    }
    

El archivo Home.js debe tener el siguiente aspecto:

Home.js

Crear el componente Título en AEM

  1. Iniciar sesión en AEM Author

  2. Vaya a Sitios > Aplicación WKND

  3. Pulse Inicio y seleccione Editar en la barra de acciones superior

  4. Seleccione Editar del selector de modo de edición en la parte superior derecha del Editor de páginas

  5. Pase el ratón sobre el texto del título predeterminado debajo del logotipo de WKND y encima de la lista de aventuras hasta que se muestre el contorno de edición azul

  6. Puntee para mostrar la barra de acciones del componente y, a continuación, puntee en la llave inglesa que desea editar

    Barra de acciones del componente Título

  7. Cree el componente Título:

    1. Título: WKND Adventures

    2. Tipo/Tamaño: H2

      Cuadro de diálogo del componente Título

  8. Pulse Listo para guardar

  9. Previsualice los cambios en el Editor de SPA de AEM

  10. Actualice la aplicación WKND que se ejecuta localmente en http://localhost:3000 y vea los cambios de título creados inmediatamente reflejados.

    Componente de título en la SPA

Enhorabuena.

¡Ha agregado un componente fijo editable a la aplicación WKND! Ahora ya sabe cómo:

  • Se ha creado un componente fijo, pero editable, en la SPA
  • Crear el componente fijo en AEM
  • Ver el contenido creado en la SPA remota

Siguientes pasos

Los siguientes pasos son agregar un componente contenedor de AEM ResponsiveGrid a la SPA que permita al autor agregar y editar componentes a la SPA.

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4