Skip to content

Commit

Permalink
Merge branch 'next' of github.com:ProcessMaker/screen-builder into fe…
Browse files Browse the repository at this point in the history
…ature/FOUR-14257
  • Loading branch information
gustavobascope committed Mar 12, 2024
2 parents 5ef21a3 + 15006a5 commit 9cbf2a4
Show file tree
Hide file tree
Showing 10 changed files with 166 additions and 38 deletions.
30 changes: 15 additions & 15 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@processmaker/screen-builder",
"version": "2.84.2",
"version": "2.85.1",
"scripts": {
"dev": "VITE_COVERAGE=true vite",
"build": "vite build",
Expand Down Expand Up @@ -35,8 +35,8 @@
"axios-extensions": "^3.1.6",
"lodash": "^4.17.21",
"lru-cache": "^10.0.1",
"moment": "^2.29.1",
"moment-timezone": "^0.5.27",
"moment": "^2.30.1",
"moment-timezone": "^0.5.45",
"monaco-editor": "^0.34.0",
"scrollparent": "^2.0.1",
"vue-loader": "^15.9.2",
Expand All @@ -55,7 +55,7 @@
"@fortawesome/fontawesome-free": "^5.6.1",
"@originjs/vite-plugin-commonjs": "^1.0.3",
"@panter/vue-i18next": "^0.15.2",
"@processmaker/vue-form-elements": "0.51.0",
"@processmaker/vue-form-elements": "0.52.0",
"@processmaker/vue-multiselect": "2.3.0",
"@storybook/addon-essentials": "^7.6.13",
"@storybook/addon-interactions": "^7.6.13",
Expand Down Expand Up @@ -114,7 +114,7 @@
},
"peerDependencies": {
"@panter/vue-i18next": "^0.15.0",
"@processmaker/vue-form-elements": "0.51.0",
"@processmaker/vue-form-elements": "0.52.0",
"i18next": "^15.0.8",
"vue": "^2.6.12",
"vuex": "^3.1.1"
Expand Down
2 changes: 2 additions & 0 deletions sonar-project.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ sonar.javascript.lcov.reportPaths=./coverage/lcov.info
sonar.exclusions=node_modules/**, dist/**, public/**, home/**, storybook-static/**
sonar.sources=src
sonar.tests=tests
sonar.cpd.exclusions=src/stories/**
sonar.coverage.exclusions=src/stories/**
3 changes: 3 additions & 0 deletions src/assets/css/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,7 @@
}
.page-dropdown-menu {
min-width: 333px;
max-height: 26rem;
overflow-y: auto;
scrollbar-width: thin;
}
4 changes: 3 additions & 1 deletion src/assets/css/tabs.css
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
/* Override Bootstrap default tab styles */
.nav-tabs {
border-bottom: 1px solid var(--tabs-border) !important;
}
.nav-tabs-nowrap {
flex-wrap: nowrap !important;
overflow: hidden !important;
}

.nav-tabs .nav-item .nav-link {
display: flex;
align-items: center;
Expand Down
8 changes: 5 additions & 3 deletions src/components/TabsBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
v-model="activeTab"
class="h-100 w-100 flat-tabs"
content-class="h-tab"
nav-class="nav-tabs-nowrap"
lazy
@changed="tabsUpdated"
@input="tabOpened"
Expand Down Expand Up @@ -196,9 +197,10 @@ export default {
}, visualThreshold);
});
},
closeTab(pageId) {
this.localOpenedPages.splice(this.localOpenedPages.indexOf(pageId), 1);
this.$emit("tab-closed", this.pages[pageId], this.localOpenedPages);
closeTab(tabIndex) {
const pageIndex = this.localOpenedPages[tabIndex];
this.localOpenedPages.splice(tabIndex, 1);
this.$emit("tab-closed", this.pages[pageIndex], this.localOpenedPages);
},
updateTabsReferences(pageDelete) {
this.localOpenedPages = this.localOpenedPages.map((page) =>
Expand Down
39 changes: 27 additions & 12 deletions src/components/sortable/sortableList/SortableList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,16 @@
<div class="rounded sortable-item-name">
<b-form-input
v-if="editRowIndex === index"
v-model="item.name"
v-model="newName"
type="text"
autofocus
required
:state="validateState(item.name, item)"
:error="validateError(item.name, item)"
@blur.stop="onBlur(item.name, item)"
@keydown.enter.stop="onBlur(item.name, item)"
@focus="onFocus(item.name, item)"
:state="validateState(newName, item)"
:error="validateError(newName, item)"
@blur.stop="onBlur(newName, item)"
@keydown.enter.stop="onBlur(newName, item)"
@keydown.esc.stop="onCancel(item)"
@focus="onFocus(item)"
/>
<span v-else>{{ item.name }}</span>
</div>
Expand Down Expand Up @@ -63,7 +64,7 @@ export default {
},
data() {
return {
originalName: '',
newName: '',
draggedItem: 0,
draggedOverItem: 0,
editRowIndex: null,
Expand All @@ -79,14 +80,14 @@ export default {
},
methods: {
validateState(name, item) {
const isEmpty = !name;
const isEmpty = !name?.trim();
const isDuplicated = this.items
.filter((i) => i !== item)
.find((i) => i.name === name);
return isEmpty || isDuplicated ? false : null;
},
validateError(name, item) {
const isEmpty = !name;
const isEmpty = !name?.trim();
if (!isEmpty) {
return this.$t("The Page Name field is required.");
}
Expand All @@ -98,19 +99,25 @@ export default {
}
return '';
},
onFocus(name, item) {
this.originalName = name;
onFocus(item) {
this.newName = item.name;
},
async onBlur(name, item) {
if (this.validateState(name, item) === false) {
this.newName = item.name;
} else {
// eslint-disable-next-line no-param-reassign
item.name = this.originalName;
item.name = name;
}
await this.$nextTick();
setTimeout(() => {
this.editRowIndex = null;
}, 250);
},
async onCancel(item) {
this.newName = item.name;
this.editRowIndex = null;
},
onClick(item, index) {
this.editRowIndex = index;
this.$emit("item-edit", item);
Expand Down Expand Up @@ -162,6 +169,14 @@ export default {
itemsSortedClone[draggedItemIndex].order = tempOrder;
}
// Update order of the items
const clone = [...itemsSortedClone];
clone.sort((a, b) => a.order - b.order);
clone.forEach((item, index) => {
// eslint-disable-next-line no-param-reassign
item.order = index + 1;
});
}
this.$emit('ordered', itemsSortedClone);
Expand Down
16 changes: 15 additions & 1 deletion src/components/vue-form-builder.vue
Original file line number Diff line number Diff line change
Expand Up @@ -881,6 +881,7 @@ export default {
config.forEach((page) => this.replaceFormText(page.items));
config.forEach((page) => this.migrateFormSubmit(page.items));
config.forEach((page) => this.updateFieldNameValidation(page.items));
this.updatePageOrder(config);
config.forEach((page) =>
this.removeDataVariableFromNestedScreens(page.items)
);
Expand All @@ -889,6 +890,18 @@ export default {
page.order = page.order || index + 1;
});
},
updatePageOrder(pages) {
const clone = [...pages];
clone.sort((a, b) => {
const aOrder = a.order || pages.indexOf(a) + 1;
const bOrder = b.order || pages.indexOf(b) + 1;
return aOrder - bOrder;
});
clone.forEach((item, index) => {
// eslint-disable-next-line no-param-reassign
item.order = index + 1;
});
},
updateFieldNameValidation(items) {
items.forEach((item) => {
if (item.inspector) {
Expand Down Expand Up @@ -1148,9 +1161,9 @@ export default {
this.updateState();
},
addPage(e) {
this.showAddPageValidations = true;
const error = this.checkPageName(this.addPageName, true);
if (error) {
this.showAddPageValidations = true;
e.preventDefault();
return;
}
Expand Down Expand Up @@ -1227,6 +1240,7 @@ export default {
globalObject.ProcessMaker.alert(error.message, "danger");
return;
}
this.updatePageOrder(this.config);
this.$store.dispatch("undoRedoModule/pushState", {
config: JSON.stringify(this.config),
currentPage: this.currentPage,
Expand Down
35 changes: 34 additions & 1 deletion src/stories/DropdownAndPages.stories.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ export const OpenPageUsingDropdown = {
"[data-test=page-dropdown] button"
);
let selectorAddPage = canvasElement.querySelector("[data-test=page-Page3]");
console.log(selectorAddPage);
await selector.click(selector);
await selectorAddPage.click(selectorAddPage);
// Open Page 3 (index=2)
Expand Down Expand Up @@ -111,3 +110,37 @@ export const OpenPageUsingDropdown = {
});
}
};

// Open a page using the PageDropdown(index)
export const ScrollWithMoreThanTenPages = {
args: {
pages: [
{ name: "Page1" },
{ name: "Page2" },
{ name: "Page3" },
{ name: "Page4" },
{ name: "Page5" },
{ name: "Page6" },
{ name: "Page7" },
{ name: "Page8" },
{ name: "Page9" },
{ name: "Page10" },
{ name: "Page11" },
{ name: "Page12" }
],
initialOpenedPages: [0]
},
play: async ({ canvasElement }) => {
const selector = canvasElement.querySelector(
"[data-test=page-dropdown] button"
);
await selector.click(selector);
// Test .page-dropdown-menu has scroll (scrollHeight > clientHeight)
await waitFor(() => {
const dropdownMenu = canvasElement.querySelector(".page-dropdown-menu");
expect(dropdownMenu.scrollHeight).toBeGreaterThan(
dropdownMenu.clientHeight
);
});
}
};
Loading

0 comments on commit 9cbf2a4

Please sign in to comment.