This commit is contained in:
2024-10-01 19:07:23 +05:00
parent 9fecfccf22
commit 4dde4b357a
26 changed files with 26396 additions and 262 deletions

View File

@@ -1,168 +1,175 @@
window.LaravelNovaWizardStore = {
data: {
steps: 0,
currentStep: 1,
},
// window.LaravelNovaWizardStore = {
// data: {
// steps: 0,
// currentStep: 1,
// },
fields: {
buttonsContainerElement: {},
cancelFormButton: {},
createFormButton: {},
prevButtonElement: {},
nextButtonElement: {},
},
// fields: {
// buttonsContainerElement: {},
// cancelFormButton: {},
// createFormButton: {},
// prevButtonElement: {},
// nextButtonElement: {},
// },
nextStep() {
if (this.data.steps > 0 && this.data.currentStep < this.data.steps) {
document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'none';
// nextStep() {
// if (this.data.steps > 0 && this.data.currentStep < this.data.steps) {
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'none';
this.data.currentStep++;
// this.data.currentStep++;
document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'inherit';
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'inherit';
return;
}
// return;
// }
if (this.data.currentStep === this.data.steps) {
this.hideNextButton()
this.showFormSubmitButton()
} else {
this.hideFormSubmitButton()
this.showNextButton()
}
},
// if (this.data.currentStep === this.data.steps) {
// this.hideNextButton()
// this.showFormSubmitButton()
// } else {
// this.hideFormSubmitButton()
// this.showNextButton()
// }
// },
prevStep() {
if (this.data.currentStep > 1) {
document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'none';
// prevStep() {
// if (this.data.currentStep > 1) {
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'none';
this.data.currentStep--;
// this.data.currentStep--;
document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'inherit';
}
},
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'inherit';
// }
// },
hideNovaFormButtons() {
this.fields.cancelFormButton = document.querySelector('button[dusk="cancel-create-button"]');
this.fields.createFormButton = document.querySelector('button[dusk="create-button"]');
// hideNovaFormButtons() {
// this.fields.cancelFormButton = document.querySelector('button[dusk="cancel-create-button"]');
// this.fields.createFormButton = document.querySelector('button[dusk="create-button"]');
this.fields.buttonsContainerElement = this.fields.createFormButton.parentNode;
this.hideFormSubmitButton();
this.hideFormCancelButton();
},
// this.fields.buttonsContainerElement = this.fields.createFormButton.parentNode;
// this.hideFormSubmitButton();
// this.hideFormCancelButton();
// },
addWizardButtons() {
this.fields.buttonsContainerElement.insertAdjacentHTML('afterbegin', this.nextButtonTemplate());
this.fields.buttonsContainerElement.insertAdjacentHTML('afterbegin', this.prevButtonTemplate());
// addWizardButtons() {
// this.fields.buttonsContainerElement.insertAdjacentHTML('afterbegin', this.nextButtonTemplate());
// this.fields.buttonsContainerElement.insertAdjacentHTML('afterbegin', this.prevButtonTemplate());
this.fields.nextButtonElement = document.getElementById('laravel-nova-wizard-next-button');
this.fields.prevButtonElement = document.getElementById('laravel-nova-wizard-prev-button');
// this.fields.nextButtonElement = document.getElementById('laravel-nova-wizard-next-button');
// this.fields.prevButtonElement = document.getElementById('laravel-nova-wizard-prev-button');
this.fields.nextButtonElement.addEventListener('click', () => {
this.nextStep()
})
// this.fields.nextButtonElement.addEventListener('click', () => {
// this.nextStep()
// })
this.fields.prevButtonElement.addEventListener('click', () => {
this.prevStep()
})
},
// this.fields.prevButtonElement.addEventListener('click', () => {
// this.prevStep()
// })
// },
nextButtonTemplate() {
return `
<button type="button" id="laravel-nova-wizard-next-button" class="border text-left appearance-none cursor-pointer rounded text-sm font-bold focus:outline-none focus:ring ring-primary-200 dark:ring-gray-600 relative disabled:cursor-not-allowed inline-flex items-center justify-center shadow h-9 px-3 bg-primary-500 border-primary-500 hover:[&amp;:not(:disabled)]:bg-primary-400 hover:[&amp;:not(:disabled)]:border-primary-400 text-white dark:text-gray-900">
<span class="flex items-center gap-1">Next</span>
</button>
`;
},
// nextButtonTemplate() {
// return `
// <button type="button" id="laravel-nova-wizard-next-button" class="border text-left appearance-none cursor-pointer rounded text-sm font-bold focus:outline-none focus:ring ring-primary-200 dark:ring-gray-600 relative disabled:cursor-not-allowed inline-flex items-center justify-center shadow h-9 px-3 bg-primary-500 border-primary-500 hover:[&amp;:not(:disabled)]:bg-primary-400 hover:[&amp;:not(:disabled)]:border-primary-400 text-white dark:text-gray-900">
// <span class="flex items-center gap-1">Next</span>
// </button>
// `;
// },
prevButtonTemplate() {
return `
<button type="button" id="laravel-nova-wizard-prev-button" class="border text-left appearance-none cursor-pointer rounded text-sm font-bold focus:outline-none focus:ring ring-primary-200 dark:ring-gray-600 relative disabled:cursor-not-allowed inline-flex items-center justify-center shadow h-9 px-3 bg-red-500 border-red-500 hover:[&amp;:not(:disabled)]:border-primary-400 text-white dark:text-gray-900">
<span class="flex items-center gap-1">Previus</span>
</button>
`;
},
// prevButtonTemplate() {
// return `
// <button type="button" id="laravel-nova-wizard-prev-button" class="border text-left appearance-none cursor-pointer rounded text-sm font-bold focus:outline-none focus:ring ring-primary-200 dark:ring-gray-600 relative disabled:cursor-not-allowed inline-flex items-center justify-center shadow h-9 px-3 bg-red-500 border-red-500 hover:[&amp;:not(:disabled)]:border-primary-400 text-white dark:text-gray-900">
// <span class="flex items-center gap-1">Previus</span>
// </button>
// `;
// },
hidePrevButton() {
this.fields.prevButtonElement.style.display = 'none'
},
// hidePrevButton() {
// this.fields.prevButtonElement.style.display = 'none'
// },
showPrevButton() {
this.fields.prevButtonElement.style.display = 'inherit'
},
// showPrevButton() {
// this.fields.prevButtonElement.style.display = 'inherit'
// },
hideNextButton() {
this.fields.nextButtonElement.style.display = 'none'
},
// hideNextButton() {
// this.fields.nextButtonElement.style.display = 'none'
// },
showNextButton() {
this.fields.nextButtonElement.style.display = 'inherit'
},
// showNextButton() {
// this.fields.nextButtonElement.style.display = 'inherit'
// },
showFormSubmitButton() {
this.fields.createFormButton.style.display = 'inherit';
},
// showFormSubmitButton() {
// this.fields.createFormButton.style.display = 'inherit';
// },
hideFormSubmitButton() {
this.fields.createFormButton.style.display = 'none';
},
// hideFormSubmitButton() {
// this.fields.createFormButton.style.display = 'none';
// },
hideFormCancelButton() {
this.fields.cancelFormButton.style.display = 'none';
}
};
// hideFormCancelButton() {
// this.fields.cancelFormButton.style.display = 'none';
// }
// };
function setupMultiStepWizard() {
let refreshIntervalId = setInterval(() => {
let formElement = document.querySelector('form');
// function setupMultiStepWizard() {
// let refreshIntervalId = setInterval(() => {
// let formElement = document.querySelector('form');
if (formElement) {
clearInterval(refreshIntervalId)
// if (formElement) {
// clearInterval(refreshIntervalId)
// Div container
let fieldsContainerElement = formElement.firstChild;
// Div elements
let fieldElements = Array.from(fieldsContainerElement.children);
// // Div container
// let fieldsContainerElement = formElement.firstChild;
// // Div elements
// let fieldElements = Array.from(fieldsContainerElement.children);
// if there a less than 2 divs, no need to wizard it!
if (fieldElements.length < 2) {
return;
}
// // if there a less than 2 divs, no need to wizard it!
// if (fieldElements.length < 2) {
// return;
// }
LaravelNovaWizardStore.data.steps = fieldElements.length;
LaravelNovaWizardStore.hideNovaFormButtons()
LaravelNovaWizardStore.addWizardButtons()
// LaravelNovaWizardStore.data.steps = fieldElements.length;
// LaravelNovaWizardStore.hideNovaFormButtons()
// LaravelNovaWizardStore.addWizardButtons()
let loopCount = 0;
fieldElements.forEach(item => {
loopCount++;
item.setAttribute('wizard-step', loopCount)
// let loopCount = 0;
// fieldElements.forEach(item => {
// loopCount++;
// item.setAttribute('wizard-step', loopCount)
if (loopCount === 1) {
return;
}
// if (loopCount === 1) {
// return;
// }
item.style.display = 'none'
})
}
}, 300);
// item.style.display = 'none'
// })
// }
// }, 300);
// }
// Nova.$on('liftedOff', () => {
// if (Nova.$router.page.component === 'Nova.Create') {
// setupMultiStepWizard()
// }
// })
// Nova.$router.on('success', (event) => {
// if (event.detail.page.component === 'Nova.Create') {
// setupMultiStepWizard()
// }
// })
// document.addEventListener('inertia:navigate', () => {
// console.log('page is updating')
// })
// // when app is booting
// Nova.booting((app, store) => {})
async function fetchCardHistory() {
let response = await fetch('/fetch-card-history');
let data = await response.json();
console.log(data)
}
Nova.$on('liftedOff', () => {
if (Nova.$router.page.component === 'Nova.Create') {
setupMultiStepWizard()
}
})
Nova.$router.on('success', (event) => {
if (event.detail.page.component === 'Nova.Create') {
setupMultiStepWizard()
}
})
document.addEventListener('inertia:navigate', () => {
console.log('page is updating')
})
// when app is booting
Nova.booting((app, store) => {})

View File

@@ -0,0 +1,47 @@
<style>
.credit-card {
width: 300px;
height: 180px;
border-radius: 15px;
border: 2px solid #ffffff;
background-color: transparent;
padding: 20px;
color: #2b3e50;
font-family: Arial, sans-serif;
position: relative;
}
.card-number {
font-size: 18px;
letter-spacing: 2px;
margin-bottom: 40px;
padding-bottom: 10px;
}
.expiry-container {
position: absolute;
bottom: 20px;
left: 20px;
right: 20px;
display: flex;
justify-content: space-between;
}
.card-holder {
font-size: 14px;
}
.expiry-date {
font-size: 14px;
}
</style>
<div>
<div class="credit-card">
<div class="card-number text-white cursor-pointer" onclick="fetchCardHistory()">{{ $resource->card_number }}</div>
<div class="expiry-container">
<div class="card-holder text-white">{{ $resource->card_name }}</div>
<div class="expiry-date text-white">{{ $resource->card_month }}/{{ $resource->card_year }}</div>
</div>
</div>
</div>