Ignore:
Timestamp:
09/15/26 21:16:02 (8 days ago)
Author:
Stefan-Saveski <stefansaveski19@…>
Branches:
master
Children:
b8093a0
Parents:
4fe4582
Message:
  • ready for presentation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/app/students/semesters/page.tsx

    r4fe4582 r8496f3c  
    1515import { getAccessToken } from '@/lib/auth';
    1616import { useTranslation } from 'react-i18next';
     17import { apiUrl } from '@/lib/api';
     18import EnrollSemesterDialog from '@/components/enroll-semester-dialog';
    1719
    1820type Semester = {
     
    113115  const [isLoading, setIsLoading] = useState(true);
    114116  const [errorMessage, setErrorMessage] = useState<string | null>(null);
     117  const [enrollOpen, setEnrollOpen] = useState(false);
     118  // Bumped after a successful enrolment so the table reloads.
     119  const [reloadKey, setReloadKey] = useState(0);
    115120  const { t } = useTranslation();
    116121
     
    130135
    131136      try {
    132         const response = await fetch('https://iknow-api.onrender.com/api/user/getSemesters', {
     137        const response = await fetch(apiUrl('/api/user/getSemesters'), {
    133138          method: 'GET',
    134139          headers: {
     
    158163      cancelled = true;
    159164    };
    160   }, []);
     165  }, [reloadKey]);
    161166
    162167  if (isLoading) {
     
    184189      {/* Header */}
    185190      <div className="bg-primary text-white rounded-xl p-8 mb-8">
    186         <div className="flex items-center gap-4">
    187           <div className="bg-white rounded-full p-4">
    188             <FontAwesomeIcon icon={faCalendarAlt} className="text-3xl text-[#0272D1]" />
     191        <div className="flex flex-col gap-4 md:flex-row md:items-center md:justify-between">
     192          <div className="flex items-center gap-4">
     193            <div className="bg-white rounded-full p-4">
     194              <FontAwesomeIcon icon={faCalendarAlt} className="text-3xl text-[#0272D1]" />
     195            </div>
     196            <div>
     197              <h1 className="text-3xl font-bold mb-2">{t('semesters')}</h1>
     198              <p className="text-lg opacity-90">
     199                {t('semesters_overview')}
     200              </p>
     201            </div>
    189202          </div>
    190           <div>
    191             <h1 className="text-3xl font-bold mb-2">{t('semesters')}</h1>
    192             <p className="text-lg opacity-90">
    193               {t('semesters_overview')}
    194             </p>
    195           </div>
     203
     204          <button
     205            className="self-start rounded-lg bg-white px-5 py-3 font-semibold text-[#0272D1] shadow-sm hover:bg-white/90 md:self-auto"
     206            onClick={() => setEnrollOpen(true)}
     207          >
     208            + {t('enroll_semester')}
     209          </button>
    196210        </div>
    197211      </div>
     
    373387        </div>
    374388      </div>
     389
     390      <EnrollSemesterDialog
     391        open={enrollOpen}
     392        onClose={() => setEnrollOpen(false)}
     393        onEnrolled={() => setReloadKey((k) => k + 1)}
     394      />
    375395    </div>
    376396  );
Note: See TracChangeset for help on using the changeset viewer.