├── .gitignore ├── .salesforcedx.yaml ├── README.md ├── config └── project-scratch-def.json ├── force-app └── main │ └── default │ └── aura │ ├── ComponentEventPlaygroundApp │ ├── ComponentEventPlaygroundApp.app │ └── ComponentEventPlaygroundApp.app-meta.xml │ ├── cmpEvent │ ├── cmpEvent.evt │ └── cmpEvent.evt-meta.xml │ ├── container │ ├── container.cmp │ ├── container.cmp-meta.xml │ ├── containerController.js │ └── containerHelper.js │ ├── eventEmitter │ ├── eventEmitter.cmp │ ├── eventEmitter.cmp-meta.xml │ ├── eventEmitterController.js │ └── eventEmitterHelper.js │ └── owner │ ├── owner.cmp │ ├── owner.cmp-meta.xml │ ├── ownerController.js │ └── ownerHelper.js ├── gfx └── overview.gif └── sfdx-project.json /.gitignore: -------------------------------------------------------------------------------- 1 | **/.DS_Store 2 | .sfdx -------------------------------------------------------------------------------- /.salesforcedx.yaml: -------------------------------------------------------------------------------- 1 | scratch-org-def: config/project-scratch-def.json 2 | assign-permset: false 3 | run-apex-tests: false 4 | delete-scratch-org: false 5 | show-scratch-org-url: true 6 | open-path: c/ComponentEventPlaygroundApp.app -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lightning Component Event Playground 2 | This project is a sample Lightning application that demonstrates the use of Lightning Component events. 3 | 4 | 5 | 6 | 7 | ## Install 8 | 1. Deploy the sample application with the Salesforce CLI. 9 | 10 | 2. Access the application from this URL: 11 | https://<YOUR_DOMAIN_HERE>.lightning.force.com/c/ComponentEventPlaygroundApp.app 12 | -------------------------------------------------------------------------------- /config/project-scratch-def.json: -------------------------------------------------------------------------------- 1 | { 2 | "orgName": "Lightning Playground", 3 | "edition": "Developer", 4 | "orgPreferences" : { 5 | "enabled": ["S1DesktopEnabled"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /force-app/main/default/aura/ComponentEventPlaygroundApp/ComponentEventPlaygroundApp.app: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Lightning Component Event Playground 10 | Open your developer console, fire events and enjoy! 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /force-app/main/default/aura/ComponentEventPlaygroundApp/ComponentEventPlaygroundApp.app-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 40.0 4 | A Lightning Component Bundle 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/aura/cmpEvent/cmpEvent.evt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /force-app/main/default/aura/cmpEvent/cmpEvent.evt-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 40.0 4 | A Lightning Event Bundle 5 | -------------------------------------------------------------------------------- /force-app/main/default/aura/container/container.cmp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Container 9 | (event handlers with includeFacets="true") 10 | 11 | 12 | 13 | 14 | 15 | Standard behavior 16 | Stop during capture phase 17 | Stop during bubble phase 18 | Pause during capture phase 19 | Pause during bubble phase 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {!v.body} 29 | 30 | -------------------------------------------------------------------------------- /force-app/main/default/aura/container/container.cmp-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 40.0 4 | A Lightning Component Bundle 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/aura/container/containerController.js: -------------------------------------------------------------------------------- 1 | ({ 2 | handleCmpEventBubble : function(component, event, helper) { 3 | helper.handleCmpEvent(component, event); 4 | }, 5 | 6 | handleCmpEventCapture : function(component, event, helper) { 7 | helper.handleCmpEvent(component, event); 8 | }, 9 | 10 | onResumeCmpEvent : function(component, event, helper) { 11 | helper.resumeEvent(component); 12 | } 13 | }) -------------------------------------------------------------------------------- /force-app/main/default/aura/container/containerHelper.js: -------------------------------------------------------------------------------- 1 | ({ 2 | handleCmpEvent : function(component, event) { 3 | var componentName = component.getName().substr(1); // Removing the 'c' namespace prefix 4 | var phase = event.getPhase(); 5 | console.log(componentName +' - event handled ('+ phase +')'); 6 | 7 | var propagationToggle = component.find('propagationToggle').get('v.value'); 8 | if (propagationToggle === 'stop-'+ phase) { 9 | console.log(componentName +' - stopping event propagation ('+ phase +')'); 10 | event.stopPropagation(); 11 | } 12 | else if (propagationToggle === 'pause-'+ phase) { 13 | console.log(componentName +' - pausing event propagation ('+ phase +')'); 14 | event.pause(); 15 | component.set('v.pausedCmpEvent', event); 16 | } 17 | }, 18 | 19 | resumeEvent : function(component) { 20 | var event = component.get('v.pausedCmpEvent'); 21 | console.log(component.getName().substr(1) +' - resuming event propagation ('+ event.getPhase() +')'); 22 | event.resume(); 23 | component.set('v.pausedCmpEvent', null); 24 | } 25 | }) -------------------------------------------------------------------------------- /force-app/main/default/aura/eventEmitter/eventEmitter.cmp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Emitter 11 | 12 | 13 | 14 | 15 | 16 | Standard behavior 17 | Stop during capture phase 18 | Stop during bubble phase 19 | Pause during capture phase 20 | Pause during bubble phase 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /force-app/main/default/aura/eventEmitter/eventEmitter.cmp-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 40.0 4 | A Lightning Component Bundle 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/aura/eventEmitter/eventEmitterController.js: -------------------------------------------------------------------------------- 1 | ({ 2 | handleCmpEventBubble : function(component, event, helper) { 3 | helper.handleCmpEvent(component, event); 4 | }, 5 | 6 | handleCmpEventCapture : function(component, event, helper) { 7 | helper.handleCmpEvent(component, event); 8 | }, 9 | 10 | onResumeCmpEvent : function(component, event, helper) { 11 | helper.resumeEvent(component); 12 | }, 13 | 14 | fireEvent : function(component, event, helper) { 15 | console.log(''); 16 | console.log(component.getName().substr(1) +' - firing event'); 17 | var myEvent = component.getEvent("cmpEvent"); 18 | myEvent.fire(); 19 | } 20 | }) -------------------------------------------------------------------------------- /force-app/main/default/aura/eventEmitter/eventEmitterHelper.js: -------------------------------------------------------------------------------- 1 | ({ 2 | handleCmpEvent : function(component, event) { 3 | var componentName = component.getName().substr(1); // Removing the 'c' namespace prefix 4 | var phase = event.getPhase(); 5 | console.log(componentName +' - event handled ('+ phase +')'); 6 | 7 | var propagationToggle = component.find('propagationToggle').get('v.value'); 8 | if (propagationToggle === 'stop-'+ phase) { 9 | console.log(componentName +' - stopping event propagation ('+ phase +')'); 10 | event.stopPropagation(); 11 | } 12 | else if (propagationToggle === 'pause-'+ phase) { 13 | console.log(componentName +' - pausing event propagation ('+ phase +')'); 14 | event.pause(); 15 | component.set('v.pausedCmpEvent', event); 16 | } 17 | }, 18 | 19 | resumeEvent : function(component) { 20 | var event = component.get('v.pausedCmpEvent'); 21 | console.log(component.getName().substr(1) +' - resuming event propagation ('+ event.getPhase() +')'); 22 | event.resume(); 23 | component.set('v.pausedCmpEvent', null); 24 | } 25 | }) -------------------------------------------------------------------------------- /force-app/main/default/aura/owner/owner.cmp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Owner 9 | 10 | 11 | 12 | 13 | 14 | Standard behavior 15 | Stop during capture phase 16 | Stop during bubble phase 17 | Pause during capture phase 18 | Pause during bubble phase 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /force-app/main/default/aura/owner/owner.cmp-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 40.0 4 | A Lightning Component Bundle 5 | 6 | -------------------------------------------------------------------------------- /force-app/main/default/aura/owner/ownerController.js: -------------------------------------------------------------------------------- 1 | ({ 2 | handleCmpEventBubble : function(component, event, helper) { 3 | helper.handleCmpEvent(component, event); 4 | }, 5 | 6 | handleCmpEventCapture : function(component, event, helper) { 7 | helper.handleCmpEvent(component, event); 8 | }, 9 | 10 | onResumeCmpEvent : function(component, event, helper) { 11 | helper.resumeEvent(component); 12 | } 13 | }) -------------------------------------------------------------------------------- /force-app/main/default/aura/owner/ownerHelper.js: -------------------------------------------------------------------------------- 1 | ({ 2 | handleCmpEvent : function(component, event) { 3 | var componentName = component.getName().substr(1); // Removing the 'c' namespace prefix 4 | var phase = event.getPhase(); 5 | console.log(componentName +' - event handled ('+ phase +')'); 6 | 7 | var propagationToggle = component.find('propagationToggle').get('v.value'); 8 | if (propagationToggle === 'stop-'+ phase) { 9 | console.log(componentName +' - stopping event propagation ('+ phase +')'); 10 | event.stopPropagation(); 11 | } 12 | else if (propagationToggle === 'pause-'+ phase) { 13 | console.log(componentName +' - pausing event propagation ('+ phase +')'); 14 | event.pause(); 15 | component.set('v.pausedCmpEvent', event); 16 | } 17 | }, 18 | 19 | resumeEvent : function(component) { 20 | var event = component.get('v.pausedCmpEvent'); 21 | console.log(component.getName().substr(1) +' - resuming event propagation ('+ event.getPhase() +')'); 22 | event.resume(); 23 | component.set('v.pausedCmpEvent', null); 24 | } 25 | }) -------------------------------------------------------------------------------- /gfx/overview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pozil/sfdc-lightning-component-event-playground/a5abf97e870a08b6e1d6a4b2a11db897b0c42e4f/gfx/overview.gif -------------------------------------------------------------------------------- /sfdx-project.json: -------------------------------------------------------------------------------- 1 | { 2 | "packageDirectories": [ 3 | { 4 | "path": "force-app", 5 | "default": true 6 | } 7 | ], 8 | "namespace": "", 9 | "sfdcLoginUrl": "https://login.salesforce.com", 10 | "sourceApiVersion": "41.0" 11 | } 12 | --------------------------------------------------------------------------------
Open your developer console, fire events and enjoy!