The "آموزش" button only appeared in the desktop-only action row, and
the modal that opens for DNS on mobile (ModalDnsConfig) never had a
tutorial link at all, unlike ModalConfigDetails for other config
types. DNS users therefore had no way to reach /tutorial on mobile.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Matches the admin's new repeater (emoji + title + items per section)
instead of a single plain-text block.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replaces the hardcoded DNS-only content and isDns/category-label check
with data from the config's `has_extra_description` / `extra_description`
fields, so any product can opt into showing free-text extra info.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Media (images/videos) now render in a responsive grid with a
full-screen lightbox on tap instead of a stacked full-width column.
- Multiple attached files (attachments[]) each get their own icon,
title, and download button, replacing the single hidden file link.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Render the download button for a tutorial's uploaded file field
(it was fetched from the API but never displayed).
- Recognize mov/avi/wmv as video (the backend already accepts them as
uploads) and add a download fallback for any media type the browser
can't play inline instead of a dead "unknown file type" message.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KMLvfLviDB12t4U9UijE4k
- Drop the now-unused "expired" filter option/status (the API never
returns expired services anymore).
- Show the order code next to each service in the config card and in
the service details modal.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KMLvfLviDB12t4U9UijE4k
This commit adds functionality to the layout component to retrieve the shop ID from the URL query parameters and dispatch it to the Redux store using the setShopId action.
This commit updates the useAxios hook to include the Shop-ID header in the request configuration. It retrieves the shop ID from the state and adds it to the headers if it exists. This change ensures that the Shop-ID is sent along with the request when making API calls.
Co-authored-by: [Author Name]
Update the initialization of the activeTutorial state in the Tutorials component to set it to 8 instead of 2. This ensures that the correct tutorial is displayed when the category ID changes. Removed an empty useEffect hook that was no longer needed.
- Add toast message to display an error when payment is disabled
- Dispatch setIsPaymentGateway action to update payment gateway status
- Navigate to "/noactive-payment" when payment is disabled