Add enums, AuthService, and integrate backend registration endpoints
All checks were successful
Build frontend / build (push) Successful in 57s

- Add separate enum files: BuildingType, PropertyStatus, BookingStatus, CommissionType, IdentityType, UserRole, City, LoginMethod, OwnerType, CustomerType
- Add AuthService (addToken/getToken/deleteToken)
- Update api.js: use AuthService, add Owner/Add and Customer/Add endpoints
- Update login page to use AuthService for token storage
- Rewrite owner register: 3-step flow with OwnerType dropdown, backend integration, OTP verification
- Rewrite tenant register: 2-step flow with CustomerType dropdown, backend integration, OTP verification
- Update homepage and property detail to use enums instead of hardcoded maps
- Update AddPropertyForm to import from enums directly
- Add console logs and status toasts linked to API response messages
This commit is contained in:
Claw AI
2026-03-27 18:01:42 +00:00
parent 2fb55db360
commit eff0b41b78
20 changed files with 1099 additions and 843 deletions

View File

@ -3,7 +3,7 @@
import { useState } from 'react';
import { motion } from 'framer-motion';
import { useProperties } from '@/app/contexts/PropertyContext';
import { COMMISSION_TYPE, CITIES } from '@/app/utils/constants';
import { CommissionType, City, CitiesList } from '@/app/enums';
import { X, MapPin, Home, DollarSign, Percent } from 'lucide-react';
export default function AddPropertyForm({ onClose, onSuccess }) {
@ -25,7 +25,7 @@ export default function AddPropertyForm({ onClose, onSuccess }) {
dailyPrice: 0,
commissionRate: 5,
commissionType: COMMISSION_TYPE.FROM_OWNER,
commissionType: CommissionType.FROM_OWNER,
securityDeposit: 0,
@ -86,11 +86,11 @@ export default function AddPropertyForm({ onClose, onSuccess }) {
const commission = (dailyPrice * commissionRate) / 100;
switch(commissionType) {
case COMMISSION_TYPE.FROM_TENANT:
case CommissionType.FROM_TENANT:
return dailyPrice + commission;
case COMMISSION_TYPE.FROM_OWNER:
case CommissionType.FROM_OWNER:
return dailyPrice;
case COMMISSION_TYPE.FROM_BOTH:
case CommissionType.FROM_BOTH:
return dailyPrice + (commission / 2);
default:
return dailyPrice;
@ -232,8 +232,8 @@ export default function AddPropertyForm({ onClose, onSuccess }) {
<input
type="radio"
name="commissionType"
value={COMMISSION_TYPE.FROM_OWNER}
checked={formData.commissionType === COMMISSION_TYPE.FROM_OWNER}
value={CommissionType.FROM_OWNER}
checked={formData.commissionType === CommissionType.FROM_OWNER}
onChange={(e) => setFormData({...formData, commissionType: e.target.value})}
/>
<span>من المالك</span>
@ -242,8 +242,8 @@ export default function AddPropertyForm({ onClose, onSuccess }) {
<input
type="radio"
name="commissionType"
value={COMMISSION_TYPE.FROM_TENANT}
checked={formData.commissionType === COMMISSION_TYPE.FROM_TENANT}
value={CommissionType.FROM_TENANT}
checked={formData.commissionType === CommissionType.FROM_TENANT}
onChange={(e) => setFormData({...formData, commissionType: e.target.value})}
/>
<span>من المستأجر</span>
@ -252,8 +252,8 @@ export default function AddPropertyForm({ onClose, onSuccess }) {
<input
type="radio"
name="commissionType"
value={COMMISSION_TYPE.FROM_BOTH}
checked={formData.commissionType === COMMISSION_TYPE.FROM_BOTH}
value={CommissionType.FROM_BOTH}
checked={formData.commissionType === CommissionType.FROM_BOTH}
onChange={(e) => setFormData({...formData, commissionType: e.target.value})}
/>
<span>من الاثنين</span>