Giter Club home page Giter Club logo

trailheadapps / easy-spaces-lwc Goto Github PK

View Code? Open in Web Editor NEW
223.0 17.0 174.0 8.42 MB

Sample application for Lightning Web Components on Salesforce Platform. Part of the sample gallery. Event management use case. Get inspired and learn best practices.

Home Page: https://developer.salesforce.com

License: Creative Commons Zero v1.0 Universal

JavaScript 71.04% Apex 10.81% HTML 16.20% CSS 0.59% Shell 0.64% Batchfile 0.72%
salesforce lightning-web-components apex

easy-spaces-lwc's Introduction

Easy Spaces Lightning Web Components Sample Application

CI Workflow Packaging Workflow codecov

IMPORTANT: This is the new Lightning Web Components version of the Easy Spaces sample application. If you are looking for the Aura version, click here.

Easy Spaces Logo

Easy Spaces is a fictional event management company that creates and manages custom pop-up spaces for companies and individuals. Easy Spaces helps customers create temporary spaces like cafés, game rooms or themed rooms for special occasions in their offices and homes.

Trailhead Badge

Learn more about this app by completing the Quick Start: Explore the Easy Spaces Sample App Trailhead project.

Thumbnail

This sample application is designed to run on Salesforce Platform. If you want to experience Lightning Web Components on any platform, please visit https://lwc.dev, and try out our Lightning Web Components sample application LWC Recipes OSS.

Table of Contents

Installation Instructions

There are two ways to install Easy Spaces:

  • Using a Scratch Org: This is the recommended installation option. Use this option if you are a developer who wants to experience the app and the code.
  • Using Unlocked Packages: This option allows anybody to experience the sample app without installing a local development environment.

Installing Easy Spaces using a Scratch Org

  1. Set up your environment. Follow the steps in the Quick Start: Lightning Web Components Trailhead project. The steps include:

    • Enable Dev Hub in your Trailhead Playground
    • Install Salesforce CLI
    • Install Visual Studio Code
    • Install the Visual Studio Code Salesforce extensions, including the Lightning Web Components extension
  2. If you haven't already done so, authenticate with your hub org and provide it with an alias (myhuborg in the command below):

    sf org login web -d -a myhuborg
    
  3. Clone this repository:

    git clone https://github.com/trailheadapps/easy-spaces-lwc
    cd easy-spaces-lwc
    
  4. Create a scratch org and provide it with an alias (easyspaces in the command below):

    sf org create scratch -d -f config/project-scratch-def.json -a easyspaces
    
  5. Push source to your scratch org:

    sf project deploy start
    
  6. Assign two Easy Spaces permission sets to the default user:

    sf org assign permset -n EasySpacesObjects
    sf org assign permset -n SpaceManagementApp
    
  7. (Optional) Assign the Walkthroughs permission set to the default user.

    Note: this will enable your user to use In-App Guidance Walkthroughs, allowing you to be taken through a guided tour of the sample app. The Walkthroughs permission set gets auto-created with In-App guidance activation.

    sf org assign permset -n Walkthroughs
    
  8. Import sample data:

    sf data tree import -p ./data/Plan1.json
    sf data tree import -p ./data/Plan2.json
    
  9. Open the scratch org:

    sf org open
    
  10. In Setup, navigate to Themes and Branding

  11. Activate the Easy Spaces theme

Installing Easy Spaces using Unlocked Packages

Follow this set of instructions if you want to deploy the app to a more permanent environment than a Scratch org or if you don't want to install the local developement tools. You can use a non source-tracked orgs such as a free Developer Edition Org or a Trailhead Playground.

Make sure to start from a brand-new environment to avoid conflicts with previous work you may have done.

  1. Log in to your org

  2. Click this link to install the es-base-objects package and choose Install for All Users.

  3. Click this link to install the es-base-styles package and choose Install for All Users.

  4. Click this link to install the es-base-code package and choose Install for All Users.

  5. Click this link to install the es-space-mgmt package and choose Install for All Users.

  6. From the command line, enter the following commands to clone this repository. You need to do this to get the metadata, code and files with sample data on your computer. We will upload some sample files from the data folder of the project from your computer to Salesforce in steps 9 through 12:

    git clone https://github.com/trailheadapps/easy-spaces-lwc
    cd easy-spaces-lwc
    
  7. Assign EasySpacesObjects permission set by following below steps:

    • Go to Setup > Users > Permission Sets.
    • Click EasySpacesObjects.
    • Click Manage Assignments.
    • Click Add Assignments.
    • Select your username and click Assign.
  8. Assign SpaceManagementApp permission set by following below steps:

    • Go to Setup > Users > Permission Sets.
    • Click SpaceManagementApp.
    • Click Manage Assignments.
    • Click Add Assignments.
    • Select your username and click Assign.
  9. Import Lead data:

    • In Setup, type Data Import in the Quick Find box and click Data Import Wizard.
    • Click Launch Wizard.
    • Click the Standard objects tab, click Leads, and click Add New Records.
    • Drag Lead_Data.csv from the data folder of this project from your computer to the upload area.
    • Click Next, Next, and Start Import.
  10. Import Contact data:

    • In Setup, type Data Import in the Quick Find box and click Data Import Wizard.
    • Click Launch Wizard.
    • Click the Standard objects tab, click Accounts and Contacts, and click Add New Records.
    • Drag Contact_Data.csv from the data folder of this project from your computer to the upload area.
    • Click Next, Next, and Start Import.
  11. Import Market data:

    • In Setup, type Data Import in the Quick Find box and click Data Import Wizard.
    • Click Launch Wizard.
    • Click the Custom objects tab, click Markets, and click Add New Records.
    • Drag Market_Data.csv from the data folder of this project from your computer to the upload area.
    • Click Next, Next, and Start Import.
  12. Import Spaces data:

    • In Setup, type Data Import in the Quick Find box and click Data Import Wizard.
    • Click Launch Wizard.
    • Click the Custom objects tab, click Spaces, and click Add New Records.
    • In the Add New Records menu, under Which Market field in your file specifies the Master/Detail relationship? select Market Name
    • Drag Space_Data.csv from the data folder of this project from your computer to the upload area.
    • Click Next, Next, and Start Import.
  13. In Setup, navigate to Themes and Branding

  14. Activate the Easy Spaces theme

Explore the application

  1. In App Launcher, click View all then select the Space Management app.

  2. Note: Before trying to work with the Spaces Designer, use the Reservation Manager to draft a few reservations.

  3. Have fun exploring!

Optional Installation Instructions

This repository contains several files that are relevant if you want to integrate modern web development tooling to your Salesforce development processes, or to your continuous integration/continuous deployment processes.

Code formatting

Prettier is a code formatter used to ensure consistent formatting across your code base. To use Prettier with Visual Studio Code, install this extension from the Visual Studio Code Marketplace. The .prettierignore and .prettierrc files are provided as part of this repository to control the behavior of the Prettier formatter.

Warning The current Apex Prettier plugin version requires that you install Java 11 or above.

Code linting

ESLint is a popular JavaScript linting tool used to identify stylistic errors and erroneous constructs. To use ESLint with Visual Studio Code, install this extension from the Visual Studio Code Marketplace. The .eslintignore file is provided as part of this repository to exclude specific files from the linting process in the context of Lighning Web Components development.

Pre-commit hook

This repository also comes with a package.json file that makes it easy to set up a pre-commit hook that enforces code formatting and linting by running Prettier and ESLint every time you git commit changes.

To set up the formatting and linting pre-commit hook:

  1. Install Node.js if you haven't already done so
  2. Run npm install in your project's root folder to install the ESLint and Prettier modules (Note: Mac users should verify that Xcode command line tools are installed before running this command.)

Prettier and ESLint will now run automatically every time you commit changes. The commit will fail if linting errors are detected. You can also run the formatting and linting from the command line using the following commands (check out package.json for the full list):

npm run lint
npm run prettier

Features

A quick overview of the features you can explore in Easy Spaces:

  • Modular app design and Unlocked Packages

  • Lightning Console APIs & Background Refresh Methods

  • Salesforce Flow

    • Dynamic flow interview components
    • Custom flow screen components
    • Local Action components
  • Custom Lightning Page Templates

  • Lightning Theming

  • Custom Metadata Types

Code Highlights

Dynamic Flows and Local Action Components

The spaceDesigner and reservationHelper Aura components render flow interviews dynamically, by using the lightning:flow base component. You can see the reservationHelperForm and spaceDesignForm Lightning web components at work as screens in these dynamic flows. Both of these components use lightning__FlowScreen as the target in the component’s tag, and FlowNavigationNextEvent event from the lightning/flowSupport module to control flow navigation actions.

See this blog post for more detail about custom flow navigation and dynamic flow interviews.

These components used as Salesforce Flow screens also use a convention in the markup of their meta files, to help developers better track how properties are being used by flow interviews. See the reservationHelperForm and spaceDesignForm component meta files for examples.

Object-Agnostic Design

The customerList and customerTile Lightning web components can display information from Contact objects or Lead objects. In the Reservation Manager app page, both Lead and Contact variations are used in order to create a unified workspace:

Two instances of customerList component on canvas in Lightning App Builder

The customerList Lightning web component uses a design attribute to allow for users working in Lightning App Builder to control which object an instance of the Lightning web component should display:

customerList component design attribute as picklist in Lightning App Builder

This is just one example of object-agnostic design at work in Easy Spaces. See this blog post for more detail about this pattern.

Console Navigation and Background Refresh

Easy Spaces uses the Lightning Console JavaScript API and the Lightning web component NavigationMixin to control user navigation between tabs and subtabs. You can see the lightning:workspaceAPI component at work in the openRecordAction Aura component, which enables flow interviews to navigate users to a new subtab. The reservationHelperAura and spaceDesignerAura components use the lightning:navigationItemAPI component to refresh custom Lightning Page tabs in the background as a user works. You can get more detail about using the Workspace API in your components in this blog post.

Lightning web components use the NavigationMixin control navigation behavior. You can see the NavigationMixin at work in the relatedSpaces, customerTile and reservationTile Lightning web components. The customerList and reservationList Lightning web components use Lightning Data Service wired methods to display data from Apex. This allows the platform to handle provisioning and managing a client-side cache. These components programmatically refresh that wired data, based on user interactions with sibling Aura components. Check out the code in reservationList and customerList Lightning web component Javascript files.

Modular Design and Unlocked Packaging

Easy Spaces illustrates how to organize application metadata into granular units or modules. This approach is reflected in the design patterns at work throughout the application, like the use of object-agnostic components. But you'll also see this at work in the structure of the Easy Spaces repo itself.

The Easy Spaces application is made of several, interdependent unlocked packages. The dependecies between the Easy Spaces packages are listed in the sfdx-project.json file for this repo.

You can also explore the contents of each package by looking at the related package folder within this repo. The path attribute entries in the sfdx-project.json show which folder contains the metadata for a particular package.

For more about how the Easy Spaces metadata is organized into package modules, check out this post.

Code Tours

Code Tours are guided walkthroughs that will help you understand the app code better. To be able to run them, install the CodeTour VSCode extension.

easy-spaces-lwc's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

easy-spaces-lwc's Issues

[222+] Migrate Aura page templates to LWC

What is missing from the application? Please describe.
Currently the application uses an Aura component as page template (see here and here).

Describe the solution you'd like
Once page templates are natively available with LWC the Aura wrapper should be removed.

Fix prettier command for Windows compatibility

What is missing from the application? Please describe.
The current configuration of the npm script for running Prettier doesn't work on Windows.

Describe the solution you'd like
Change the format of the prettier commands from using single quotes to escaped double quotes.

Example:

{
        "prettier": "prettier --write \"**/*.{css,html,js,json,md,ts,yaml,yml}\"",
        "prettier:verify": "prettier --list-different \"**/*.{css,html,js,json,md,ts,yaml,yml}\"",
}

Simplify page design of Reservation Manager and Space Designer page

What is missing from the application? Please describe.
Currently, the page architecture for the reservation page and the space designer is pretty complex and hard to understand. We have been running with this app to the SI partners to showcase the app and have overwhelmed our learners by the app complexity.

Also, we have received some more feedback from flow product owners on how complex the design is.

Current Design State

Screen Shot 2020-08-10 at 5 33 27 PM

The current design uses lwc, aura, and flows. Flows use lwc embedded in them.

At this point, we are not able to get rid of aura because lwc currently does not support launching flows dynamically. This makes the design complex!

Describe the solution you'd like

We should get rid of the aura completely. This will simplify the design!

What about the dynamic flow launch if we get rid of aura?

For this, the proposal is we use the lightning app builder which allows us to select the flow component. This way we can still show how one could replace the different flow if needed.

Screen Shot 2020-08-10 at 5 41 53 PM

proposed state

Screen Shot 2020-08-10 at 5 48 12 PM

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Add instructions for deploying to Trailhead playground

What is missing from the application? Please describe.
A clear and concise description of what the problem is. Ex. I'd like to see an implementation of [...]

Describe the solution you'd like
Add instructions for deploying to Trailhead playground. the other sample apps have it but this one just has push for scratch orgs.

Describe alternatives you've considered

Additional context

ESBaseStylesLWC package can be independent

Summary

I am having a hard time understanding why the ESBaseStylesLWC unlocked packages should depend on the ESBaseObjects package?

Should we remove the dependency on the objects?

Fix lint-staged commit warning

Problem: each commit to the project outputs this warning:
⚠ Some of your tasks use git add command. Please remove it from the config since all modifications made by tasks will be automatically added to the git commit index.

Fix: Current version of lint-staged automates git add action so we need to remove this from package.json:

"*": [
  "git add"
]

[222+] Migration Aura Flow wrapper to LWC

What is missing from the application? Please describe.
Currently the application uses an Aura component for wrapping LWCs that are used in Flow (see here and here).

Describe the solution you'd like
Once the new metadata target is available for flow screens the wrapper should be removed.

Implement WITH_SECURITY_ENFORCED in SOQL

What is missing from the application? Please describe.
With Spring '20 a new security option WITH _SECURITY_ENFORCED is available. This is not reflected in the codebase.

Describe the solution you'd like
The code base needs to be checked if/where it makes sense to apply the option.

Describe alternatives you've considered
None.

Push source sequentially with pushPackageDirectoriesSequentially CLI flag

Summary

We have several package directories in this app and it would make sense to push them sequentially in order to validate dependencies.
Thankfully, we have a pushPackageDirectoriesSequentially CLI flag that we can use for this:
https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ws_mpd.htm#mpd-push-source-sequentially

Suggested Solution

No response

Alternative Solutions

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

[222+] Migrate Aura workspace and navigation API to LWC

What is missing from the application? Please describe.
Currently the application uses Aura components as wrappers to make use of the workspace PAI (see here and for the navigation API (see here and here).

Describe the solution you'd like
Once these APIs are available the Aura components should be replaced with LWC counterparts.

Apply SLDS best practices to components

What is missing from the application? Please describe.
To reflect UI development best practices the sample app needs to make use of SLDS design tokens that make use of the UI density settings in an org. Similar to that any manual CSS should be replaced, where it makes sense, with SLDS classes instead.

Describe the solution you'd like
Validate all Lightning web components (and Aura, if applicable) if they make use of the latest SLDS design tokens, and if manual CSS syntax needs to be updated with SLDS classes.

The SLDS Validator provides the needed analysis and correction capabilities.

Exclude .vscode from Prettier

Prettier should not format auto-generated/internal IDE files like .vscode. This applies to ALL sample apps.

Fix: simply add .vscode to .prettierignore.

Exclude temporary files from local-dev-server for git commits

What is missing from the application? Please describe.
The newly introduced local development server for on-platform LWC creates a new local folder within DX projects. That folder holds temporary data.

Describe the solution you'd like
The folder should be excluded from git commits, as the data is only temporary. For that the .gitignore needs to be updated exactly as in this pull request.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.