Best JavaScript code snippet using storybook-root
Page.js
Source:Page.js
1import React, {Component} from 'react';2import { View } from 'react-native';3import { IssueList } from './Issue'4import { GroupedLabelFilterList } from './Label'5import { MilestoneList } from './Milestone'6import { IssueTypeList } from './IssueType'7import { AssigneeList } from './Assignee'8import { CollapsableHeader, IndirectHeaders, Header } from './Collapsable'9const IssuessByAssigneeList = (props) => {10 return props.assignees.map(assignee => (11 <IssueList12 key={assignee}13 assignee={assignee}14 list={props.issuesByAssignee[assignee]}15 settings={props.settings}16 />17 ));18}19class Page extends Component {20 constructor(props) {21 super(props);22 this.state = {23 requiredMilestone: props.queryParams.milestone,24 requiredAssignee: props.queryParams.assignee,25 requiredLabels: [],26 forbiddenLabels: [],27 allowedIssueType: props.queryParams.issueType ?? "issue",28 headers: {29 milestones: {30 label: 'Milestones',31 expanded: false,32 },33 labels: {34 label: 'Labels',35 expanded: false,36 },37 types: {38 label: 'Types',39 expanded: false,40 },41 assignees: {42 label: 'Assignees',43 expanded: false,44 },45 settings: {46 label: 'Settings',47 expanded: false,48 },49 },50 };51 }52 countById(collection, id, item) {53 let existing = collection[id];54 if (!existing) {55 existing = collection[id] = item;56 existing.count = 1;57 } else {58 existing.count += 1;59 }60 }61 addById(collection, id, item) {62 let existing = collection[id];63 if (!existing) {64 collection[id] = [item];65 } else {66 existing.push(item);67 }68 }69 render() {70 let issuesByAssignee = {};71 let milestonesById = {};72 let labelsById = {};73 let allAssignees = [];74 this.props.issues.forEach(issue => {75 let isAllowedIssueType = (this.state.allowedIssueType === undefined || this.state.allowedIssueType === issue.issueType);76 let haveRequiredLabels = this.state.requiredLabels.length > 0;77 let requiredLabelsMatched = issue.labels.reduce((requiredLabelsMatched, current) => {78 if (this.state.requiredLabels.includes(current.id)) {79 requiredLabelsMatched++;80 }81 return requiredLabelsMatched;82 }, 0);83 let forbiddenLabelsMatched = issue.labels.reduce((forbiddenLabelsMatched, current) => {84 if (this.state.forbiddenLabels.includes(current.id)) {85 forbiddenLabelsMatched++;86 }87 return forbiddenLabelsMatched;88 }, 0);89 let milestonesMatched = !this.state.requiredMilestone || this.state.requiredMilestone === issue.milestone.title;90 let assigneeMatched = !this.state.requiredAssignee || this.state.requiredAssignee === issue.assignee;91 if ((forbiddenLabelsMatched == 0) && 92 (!haveRequiredLabels || requiredLabelsMatched) &&93 milestonesMatched &&94 assigneeMatched &&95 isAllowedIssueType) {96 this.addById(issuesByAssignee, issue.assignee, issue);97 }98 if (!allAssignees.includes(issue.assignee)) {99 allAssignees.push(issue.assignee);100 }101 issue.labels.forEach(label => {102 this.countById(labelsById, label.id, label);103 });104 if (issue.milestone.id) {105 this.countById(milestonesById, issue.milestone.title, issue.milestone);106 }107 });108 let assigneesWithIssues = Object.keys(issuesByAssignee).sort((a,b) => {109 let issuesA = issuesByAssignee[a];110 let issuesB = issuesByAssignee[b];111 return issuesB.length - issuesA.length;112 });113 allAssignees = allAssignees.sort((a,b) => a.localeCompare(b));114 const toggleFromList = (list, item) => {115 let index = list.indexOf(item);116 let newList;117 if (index >= 0) {118 newList = [...list];119 newList.splice(index, 1);120 } else {121 newList = [item, ...list];122 }123 return newList;124 }125 const addToLabelFilter = (label) => {126 console.log(`Require '${label.name}'`);127 this.setState({128 requiredLabels: toggleFromList(this.state.requiredLabels, label.id),129 });130 }131 const filterOutLabel = (label) => {132 console.log(`Forbid '${label.name}'`);133 this.setState({134 forbiddenLabels: toggleFromList(this.state.forbiddenLabels, label.id),135 });136 }137 const resetLabelFilters = () => {138 console.log(`Reset all filters`);139 this.setState({140 requiredLabels: [],141 forbiddenLabels: [],142 });143 }144 const addToMilestoneFilter = (milestone) => {145 console.log(`Milestone '${milestone}'`);146 this.setState({147 requiredMilestone: (this.state.requiredMilestone == milestone.title) ? undefined : milestone.title,148 });149 }150 const addToAssigneeFilter = (assignee) => {151 console.log(`Assignee '${assignee}'`);152 this.setState({153 requiredAssignee: (this.state.requiredAssignee == assignee) ? undefined : assignee,154 });155 }156 const addToIssueTypeFilter = (issueType) => {157 console.log(`IssueType '${issueType}'`);158 this.setState({159 allowedIssueType: (this.state.allowedIssueType === issueType) ? undefined : issueType,160 });161 }162 return (163 <>164 <IndirectHeaders165 headers={166 Object.entries(this.state.headers).map(entry => {167 return {...entry[1], ...{key: entry[0]}}168 })169 }170 onExpandedChanged={(key, value) => {171 let headers = this.state.headers;172 headers[key].expanded = value;173 this.setState({headers: headers});174 }}/>175 { (!this.state.headers.milestones.expanded) ? null : 176 <Header header="Milestones" level={2}>177 <MilestoneList178 milestonesById={milestonesById}179 required={this.state.requiredMilestone}180 addToFilter={addToMilestoneFilter}/>181 </Header>182 }183 { (!this.state.headers.labels.expanded) ? null : 184 <Header header="Labels" level={2} style={{backgroundColor: '#eeeeee'}}>185 <GroupedLabelFilterList186 labelsById={labelsById}187 requiredLabels={this.state.requiredLabels}188 forbiddenLabels={this.state.forbiddenLabels}189 addToFilter={addToLabelFilter}190 filterOut={filterOutLabel}191 resetFilters={resetLabelFilters}/>192 </Header>193 }194 { (!this.state.headers.types.expanded) ? null : 195 <Header header="Types" level={2}>196 <IssueTypeList197 required={this.state.allowedIssueType}198 issueTypes={['issue', 'pull_request'] /* TODO: Share possible values with Query.js */}199 addToFilter={addToIssueTypeFilter}/>200 </Header>201 }202 { (!this.state.headers.assignees.expanded) ? null : 203 <Header header="Assignees" level={2}>204 <AssigneeList205 assignees={allAssignees}206 required={this.state.requiredAssignee}207 addToFilter={addToAssigneeFilter}/>208 </Header>209 }210 { (!this.state.headers.settings.expanded) ? null : 211 <Header header="Settings" level={2}>212 {this.props.settingsUI}213 </Header>214 }215 <IssuessByAssigneeList216 assignees={assigneesWithIssues}217 issuesByAssignee={issuesByAssignee}218 requiredLabels={this.state.requiredLabels}219 settings={this.props.settings}/>220 </>221 );222 }223}...
requiredLabels.test.ts
Source:requiredLabels.test.ts
1import requiredLabels from '../../src/conditions/requiredLabels'2import { createPullRequestInfo, createConditionConfig } from '../mock'3describe('open', () => {4 it('returns success with no labels and no configuration', async () => {5 const result = requiredLabels(6 createConditionConfig(),7 createPullRequestInfo({8 labels: {9 nodes: []10 }11 })12 )13 expect(result.status).toBe('success')14 })15 it('returns fail with label not in configuration', async () => {16 const result = requiredLabels(17 createConditionConfig({18 requiredLabels: ['required label']19 }),20 createPullRequestInfo({21 labels: {22 nodes: [{23 name: 'non required label'24 }]25 }26 })27 )28 expect(result.status).toBe('fail')29 })30 it('returns success with label in configuration', async () => {31 const result = requiredLabels(32 createConditionConfig({33 requiredLabels: ['required label']34 }),35 createPullRequestInfo({36 labels: {37 nodes: [{38 name: 'required label'39 }]40 }41 })42 )43 expect(result.status).toBe('success')44 })45 it('returns success with multiple labels in pull request has required label in configuration', async () => {46 const result = requiredLabels(47 createConditionConfig({48 requiredLabels: ['required label']49 }),50 createPullRequestInfo({51 labels: {52 nodes: [{53 name: 'required label'54 }, {55 name: 'non required label'56 }]57 }58 })59 )60 expect(result.status).toBe('success')61 })62 it('returns success with labels in pull request also in configuration', async () => {63 const result = requiredLabels(64 createConditionConfig({65 requiredLabels: ['required label', 'required label 2']66 }),67 createPullRequestInfo({68 labels: {69 nodes: [{70 name: 'required label'71 }, {72 name: 'required label 2'73 }]74 }75 })76 )77 expect(result.status).toBe('success')78 })79 it('returns fail with labels in pull request also in configuration', async () => {80 const result = requiredLabels(81 createConditionConfig({82 requiredLabels: ['required label', 'required label 2']83 }),84 createPullRequestInfo({85 labels: {86 nodes: [{87 name: 'required label'88 }]89 }90 })91 )92 expect(result.status).toBe('fail')93 })94})
dangerfile.ts
Source:dangerfile.ts
1import { fail, danger } from 'danger';2import { execSync } from 'child_process';3execSync('npm install lodash');4const flatten = require('lodash/flatten');5const intersection = require('lodash/intersection');6const isEmpty = require('lodash/isEmpty');7const pkg = require('../../package.json'); // eslint-disable-line import/newline-after-import8const prLogConfig = pkg['pr-log'];9const Versions = {10 PATCH: 'PATCH',11 MINOR: 'MINOR',12 MAJOR: 'MAJOR',13};14const branchVersion = Versions.MINOR;15const checkRequiredLabels = labels => {16 const forbiddenLabels = flatten([17 'do not merge',18 'in progress',19 branchVersion !== Versions.MAJOR ? 'BREAKING CHANGE' : [],20 branchVersion === Versions.PATCH ? 'feature request' : [],21 ]);22 const requiredLabels = flatten([prLogConfig.skipLabels || [], (prLogConfig.validLabels || []).map(keyVal => keyVal[0])]);23 const blockingLabels = intersection(forbiddenLabels, labels);24 if (!isEmpty(blockingLabels)) {25 fail(`PR is marked with ${blockingLabels.map(label => `"${label}"`).join(', ')} label${blockingLabels.length > 1 ? 's' : ''}.`);26 }27 const foundLabels = intersection(requiredLabels, labels);28 if (isEmpty(foundLabels)) {29 fail(`PR is not labeled with one of: ${JSON.stringify(requiredLabels)}`);30 } else if (foundLabels.length > 1) {31 fail(`Please choose only one of these labels: ${JSON.stringify(foundLabels)}`);32 }33};34if (prLogConfig) {35 const { labels } = danger.github.issue;36 checkRequiredLabels(labels.map(l => l.name));...
Using AI Code Generation
1import { requiredLabels } from 'storybook-root-decorator';2import { storiesOf } from '@storybook/react';3import { withInfo } from '@storybook/addon-info';4import { withNotes } from '@storybook/addon-notes';5storiesOf('Test', module)6 .addDecorator(7 requiredLabels(['label1', 'label2'], 'Please check labels')8 .addDecorator(withInfo)9 .addDecorator(withNotes)10 .add('Test', () => <div>Test</div>);11import React from 'react';12import { mount } from 'enzyme';13import Test from './test';14describe('Test', () => {15 it('should render without throwing an error', () => {16 expect(mount(<Test />)).toHaveLength(1);17 });18});19import React from 'react';20import { mount } from 'enzyme';21import Test from './test';22describe('Test', () => {23 it('should render without throwing an error', () => {24 expect(mount(<Test />)).toHaveLength(1);25 });26});27import initStoryshots from '@storybook/addon-storyshots';28import { requiredLabels } from 'storybook-root-decorator';29initStoryshots({30 test: requiredLabels(['label1', 'label2'], 'Please check labels')31});
Using AI Code Generation
1import { requiredLabels } from 'storybook-root';2import { requiredLabels } from 'storybook-root';3import { requiredLabels } from 'storybook-root';4import { requiredLabels } from 'storybook-root';5import { requiredLabels } from 'storybook-root';6import { requiredLabels } from 'storybook-root';7import { requiredLabels } from 'storybook-root';8import { requiredLabels } from 'storybook-root';9import { requiredLabels } from 'storybook-root';10import { requiredLabels } from 'storybook-root';11import { requiredLabels } from 'storybook-root';12import { requiredLabels } from 'storybook-root';13import { requiredLabels } from 'storybook-root';
Using AI Code Generation
1import { requiredLabels } from 'storybook-root';2import { requiredLabels } from 'storybook-root';3import { requiredLabels } from 'storybook-root';4import { requiredLabels } from 'storybook-root';5import { requiredLabels } from 'storybook-root';6import { requiredLabels } from 'storybook-root';7import { requiredLabels } from 'storybook-root';8import { requiredLabels } from 'storybook-root';9import { requiredLabels } from 'storybook-root';10import { requiredLabels } from 'storybook-root';11import { requiredLabels } from 'storybook-root';12import { requiredLabels } from 'storybook-root';13import { requiredLabels } from 'storybook-root';14import { requiredLabels } from 'storybook-root';15import { requiredLabels } from 'storybook-root';16import { requiredLabels } from 'storybook-root';17import { requiredLabels } from 'storybook-root';18import { requiredLabels } from 'storybook-root';19import { requiredLabels } from 'storybook-root';20import { requiredLabels } from 'storybook-root';
Using AI Code Generation
1import { requiredLabels } from 'storybook-root-decorator';2storiesOf('Component', module)3 .addDecorator(requiredLabels('label1', 'label2'))4 .add('with label1 and label2', () => <Component />);5import { configure, addDecorator } from '@storybook/react';6import { requiredLabels } from 'storybook-root-decorator';7addDecorator(requiredLabels('label1', 'label2'));8configure(() => {9 require('../test.js');10}, module);11import { configure, addDecorator } from '@storybook/react';12import { requiredLabels } from 'storybook-root-decorator';13addDecorator(requiredLabels('label1', 'label2'));14configure(() => {15 require('../test.js');16}, module);17import { configure, addDecorator } from '@storybook/react';18import { requiredLabels } from 'storybook-root-decorator';19addDecorator(requiredLabels('label1', 'label2'));20configure(() => {21 require('../test.js');22}, module);23import { configure, addDecorator } from '@storybook/react';24import { requiredLabels } from 'storybook-root-decorator';25addDecorator(requiredLabels('label1', 'label2'));26configure(() => {27 require('../test.js');28}, module);29import { configure, addDecorator } from '@storybook/react';30import { requiredLabels } from 'storybook-root-decorator';31addDecorator(requiredLabels('label1', 'label2'));32configure(() => {33 require('../test.js');34}, module);35import { configure, addDecorator } from '@storybook/react';36import { requiredLabels } from 'storybook-root-decorator';37addDecorator(requiredLabels('label1', 'label2'));38configure(() => {39 require('../test.js');40}, module);41import { configure, addDecorator } from '@storybook/react';42import { requiredLabels } from 'storybook-root-decorator';43addDecorator(requiredLabels('label1', 'label2'));44configure(() => {45 require('../test.js');46}, module);47import { configure, addDecorator } from '@storybook/react';48import { requiredLabels } from 'storybook-root-decorator';49addDecorator(requiredLabels('label
Using AI Code Generation
1import {requiredLabels} from 'storybook-root'2export default requiredLabels(['label1', 'label2'])3export {requiredLabels} from './requiredLabels'4export const requiredLabels = (labels) => {5 return (storyFn, context) => {6 if (labels.every((label) => context.parameters.labels.includes(label))) {7 return storyFn()8 }9 }10}11import {requiredLabels} from './requiredLabels'12describe('requiredLabels', () => {13 it('should return the story if all labels are present', () => {14 const mockStoryFn = jest.fn()15 const mockContext = {16 parameters: {17 },18 }19 const result = requiredLabels(['label1', 'label2'])(mockStoryFn, mockContext)20 expect(result).toBe(mockStoryFn)21 })22 it('should return the story if all labels are present', () => {23 const mockStoryFn = jest.fn()24 const mockContext = {25 parameters: {26 },27 }28 const result = requiredLabels(['label1', 'label2', 'label3'])(29 expect(result).toBe('Story is not ready for this label')30 })31})
Using AI Code Generation
1const storybookRoot = require("storybook-root");2const labels = storybookRoot.requiredLabels();3console.log("labels", labels);4const storybookRoot = require("storybook-root");5const labels = storybookRoot.requiredLabels();6console.log("labels", labels);7const storybookRoot = require("storybook-root");8const labels = storybookRoot.requiredLabels();9console.log("labels", labels);10const storybookRoot = require("storybook-root");11const labels = storybookRoot.requiredLabels();12console.log("labels", labels);13const storybookRoot = require("storybook-root");14const labels = storybookRoot.requiredLabels();15console.log("labels", labels);16const storybookRoot = require("storybook-root");17const labels = storybookRoot.requiredLabels();18console.log("labels", labels);19const storybookRoot = require("storybook-root");20const labels = storybookRoot.requiredLabels();21console.log("labels", labels);22const storybookRoot = require("storybook-root");23const labels = storybookRoot.requiredLabels();24console.log("labels", labels);
Using AI Code Generation
1import { requiredLabels } from 'storybook-root';2const labels = ['one', 'two', 'three'];3const required = requiredLabels(labels);4import { requiredLabels } from 'storybook-root';5const labels = ['one', 'two', 'three'];6const required = requiredLabels(labels);7import { requiredLabels } from 'storybook-root';8const labels = ['one', 'two', 'three'];9const required = requiredLabels(labels);10import { requiredLabels } from 'storybook-root';11const labels = ['one', 'two', 'three'];12const required = requiredLabels(labels);13import { requiredLabels } from 'storybook-root';14const labels = ['one', 'two', 'three'];15const required = requiredLabels(labels);16import { requiredLabels } from 'storybook-root';17const labels = ['one', 'two', 'three'];18const required = requiredLabels(labels);19import { requiredLabels } from 'storybook-root';20const labels = ['one', 'two', 'three'];21const required = requiredLabels(labels);22import { requiredLabels } from 'storybook-root';23const labels = ['one', 'two', 'three'];24const required = requiredLabels(labels);25import { requiredLabels } from 'storybook-root';
Using AI Code Generation
1import { requiredLabels } from 'storybook-root';2import { storiesOf } from '@storybook/react';3storiesOf('Required Labels', module).add('With Required Labels', () => {4 return <div>Required Labels</div>;5});6import { configure } from '@storybook/react';7import { requiredLabels } from 'storybook-root';8configure(() => {9 const req = require.context('../', true, /\.js$/);10 requiredLabels(req, 'Required Labels');11}, module);12const path = require('path');13module.exports = ({ config }) => {14 config.resolve.alias = {15 'storybook-root': path.resolve(__dirname, '../')16 };17 return config;18};
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!