diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..e8772695
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,26 @@
+---
+name: Bug report
+about: Report a bug
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go To Profile page
+2. Click on the cover photo
+3. ...
+
+**Text output/Error Messages**
+If any
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/workflows/auto_assign_reviewer.yml b/.github/workflows/auto_assign_reviewer.yml
deleted file mode 100644
index 40a16baa..00000000
--- a/.github/workflows/auto_assign_reviewer.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-name: PR Reviewer Assignment
-
-on:
- pull_request:
- types: [opened, reopened, ready_for_review]
-
-jobs:
- auto-assign-reviewer:
- name: Auto Assign Reviewer
- runs-on: ubuntu-latest
- steps:
- - name: Assign reviewers
- uses: actions/github-script@v7
- with:
- script: |
- const prAuthor = context.payload.pull_request.user.login;
- const otherReviewers = ['Amrhanysayed', 'bedosaber77', 'hagar3bdelsalam', 'Safan05'];
- let reviewers = [];
-
- if (prAuthor !== 'AliAlaa88') {
- reviewers = ['AliAlaa88', ...otherReviewers];
- } else {
- reviewers = otherReviewers;
- }
-
- reviewers = reviewers.filter(r => r !== prAuthor);
-
- if (reviewers.length > 0) {
- await github.rest.pulls.requestReviewers({
- owner: context.repo.owner,
- repo: context.repo.repo,
- pull_number: context.issue.number,
- reviewers: reviewers
- });
- }
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b6f7a3e9..2305eba8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -2,7 +2,9 @@ name: CI
on:
pull_request:
- branches: [main, development]
+ branches: [main, development, production]
+ push:
+ branches: [fix/ci]
permissions:
contents: read
@@ -12,7 +14,7 @@ jobs:
checks:
runs-on: ubuntu-latest
strategy:
- fail-fast: true
+ fail-fast: false
steps:
- name: ๐ Checkout code
@@ -27,20 +29,23 @@ jobs:
- name: ๐ฆ Install dependencies
run: npm ci
+ - name: ๐งช Run unit tests with coverage
+ run: npm run test:coverage
+
+ - name: ๐๏ธ Build Nuxt app
+ run: npm run build
+
+ - name: ๐จ Check Prettier formatting
+ run: npm run format
+
- name: ๐จ Check Prettier formatting
- run: npx prettier --check "**/*.{js,ts,vue,json,css,md}"
+ run: npm run format:check
- name: ๐งน Run ESLint
run: npm run lint
- - name: ๐งช Run unit tests with coverage
- run: npm run test:coverage
-
- name: SonarCloud Scan
- uses: SonarSource/sonarcloud-github-action@master
+ uses: SonarSource/sonarqube-scan-action@v6
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
-
- - name: ๐๏ธ Build Nuxt app
- run: npm run build
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
diff --git a/.github/workflows/pr_title_check.yml b/.github/workflows/pr_title_check.yml
index edb8ee9d..f966e843 100644
--- a/.github/workflows/pr_title_check.yml
+++ b/.github/workflows/pr_title_check.yml
@@ -1,67 +1,67 @@
name: PR Title Check
on:
- pull_request:
- types: [opened, edited, synchronize, reopened]
+ pull_request:
+ types: [opened, edited, synchronize, reopened]
jobs:
- check-pr-title:
- name: Check PR Title Format
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
+ check-pr-title:
+ name: Check PR Title Format
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
- - name: Setup Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20'
- - name: Install dependencies
- run: npm install --save-dev @commitlint/config-conventional
+ - name: Install dependencies
+ run: npm install --save-dev @commitlint/config-conventional
- - name: Validate PR title
- env:
- PR_TITLE: ${{ github.event.pull_request.title }}
- run: |
- echo "$PR_TITLE" | npx commitlint --config commitlint.config.js
+ - name: Validate PR title
+ env:
+ PR_TITLE: ${{ github.event.pull_request.title }}
+ run: |
+ echo "$PR_TITLE" | npx commitlint --config commitlint.config.js
- - name: Comment on PR if title is invalid
- if: failure()
- uses: actions/github-script@v7
- with:
- script: |
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: `โ **PR Title Check Failed**
+ - name: Comment on PR if title is invalid
+ if: failure()
+ uses: actions/github-script@v7
+ with:
+ script: |
+ github.rest.issues.createComment({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ body: `โ **PR Title Check Failed**
- Your PR title does not follow the conventional commit format.
+ Your PR title does not follow the conventional commit format.
- **Expected format:** \`type(scope): subject\`
+ **Expected format:** \`type(scope): subject\`
- **Allowed types:**
- - \`feat\`: A new feature
- - \`fix\`: A bug fix
- - \`docs\`: Documentation changes
- - \`style\`: Code style changes (formatting, etc.)
- - \`refactor\`: Code refactoring
- - \`perf\`: Performance improvements
- - \`test\`: Adding or updating tests
- - \`chore\`: Maintenance tasks
- - \`ci\`: CI/CD changes
+ **Allowed types:**
+ - \`feat\`: A new feature
+ - \`fix\`: A bug fix
+ - \`docs\`: Documentation changes
+ - \`style\`: Code style changes (formatting, etc.)
+ - \`refactor\`: Code refactoring
+ - \`perf\`: Performance improvements
+ - \`test\`: Adding or updating tests
+ - \`chore\`: Maintenance tasks
+ - \`ci\`: CI/CD changes
- **Examples:**
- - \`feat: add user authentication\`
- - \`fix(api): resolve data fetching issue\`
- - \`docs: update README with setup instructions\`
+ **Examples:**
+ - \`feat: add user authentication\`
+ - \`fix(api): resolve data fetching issue\`
+ - \`docs: update README with setup instructions\`
- **Rules:**
- - Type must be lowercase
- - Subject must not start with uppercase
- - Subject must not end with a period
- - Maximum length: 100 characters
+ **Rules:**
+ - Type must be lowercase
+ - Subject must not start with uppercase
+ - Subject must not end with a period
+ - Maximum length: 100 characters
- Please update your PR title and try again.`
- })
+ Please update your PR title and try again.`
+ })
diff --git a/.sonarlint/connectedMode.json b/.sonarlint/connectedMode.json
new file mode 100644
index 00000000..0670e00d
--- /dev/null
+++ b/.sonarlint/connectedMode.json
@@ -0,0 +1,5 @@
+{
+ "sonarCloudOrganization": "alialaa88",
+ "projectKey": "AliAlaa88_Yapper-frontend",
+ "region": "EU"
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..8ecb4a05
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,6 @@
+{
+ "sonarlint.connectedMode.project": {
+ "connectionId": "yapper",
+ "projectKey": "AliAlaa88_Yapper-frontend"
+ }
+}
diff --git a/app/core/serviceRegistry.ts b/app/core/serviceRegistry.ts
index 33007855..38d7a3be 100644
--- a/app/core/serviceRegistry.ts
+++ b/app/core/serviceRegistry.ts
@@ -4,7 +4,7 @@ import { createAuthService } from '../modules/auth/services'
import { createMediaService } from '../modules/Common/services'
import { createTimelineService } from '../modules/TimeLine/services'
import { createSearchService } from '../modules/search/services'
-import { exploreService } from "~/modules/explore/services";
+import { exploreService } from '~/modules/explore/services'
import { settingsService } from '~/modules/settings/services/settingsService'
import { listService } from '~/modules/Common/services/listService'
@@ -22,7 +22,7 @@ export const serviceFactories = {
exploreService: exploreService,
chatService: createChatService,
listService: () => listService,
- notificationsService : createNotificationsService,
+ notificationsService: createNotificationsService,
}
export type Services = {
diff --git a/app/layouts/main-layout.vue b/app/layouts/main-layout.vue
index 6f959e61..d8353c42 100644
--- a/app/layouts/main-layout.vue
+++ b/app/layouts/main-layout.vue
@@ -52,7 +52,10 @@ const { width } = useWindowSize()
const { locale, locales } = useI18n()
const { sidebarWidth } = useSidebarState()
const isSearch = computed(
- () => route.path.startsWith('/explore') || route.path.startsWith('/search') || route.path.startsWith('/notifications'),
+ () =>
+ route.path.startsWith('/explore') ||
+ route.path.startsWith('/search') ||
+ route.path.startsWith('/notifications'),
)
const isRTL = computed(() => {
diff --git a/app/layouts/profile.vue b/app/layouts/profile.vue
index c5442aee..5f9ffaa2 100644
--- a/app/layouts/profile.vue
+++ b/app/layouts/profile.vue
@@ -27,8 +27,8 @@
type="button"
class="flex h-8 w-8 items-center justify-center rounded-full hover:bg-hover transition-colors"
:aria-label="$t('timeline.banner.search')"
- @click="router.push({ name: 'explore', state: {user: username}})"
- >
+ @click="router.push({ name: 'explore', state: { user: username } })"
+ >
+
diff --git a/app/modules/Common/components/Popup/Popup.vue b/app/modules/Common/components/Popup/Popup.vue
index 4f763fba..a03a81e0 100644
--- a/app/modules/Common/components/Popup/Popup.vue
+++ b/app/modules/Common/components/Popup/Popup.vue
@@ -20,24 +20,24 @@
{{ t('timeline.banner.error') }}
diff --git a/app/modules/TimeLine/components/banner/index.ts b/app/modules/TimeLine/components/banner/index.ts index 2b686214..166013cf 100644 --- a/app/modules/TimeLine/components/banner/index.ts +++ b/app/modules/TimeLine/components/banner/index.ts @@ -1 +1 @@ -export { default } from './Banner.vue' \ No newline at end of file +export { default } from './Banner.vue' diff --git a/app/modules/TimeLine/components/bookmarkList/bookmarkList.vue b/app/modules/TimeLine/components/bookmarkList/bookmarkList.vue index ec431430..522e9226 100644 --- a/app/modules/TimeLine/components/bookmarkList/bookmarkList.vue +++ b/app/modules/TimeLine/components/bookmarkList/bookmarkList.vue @@ -15,7 +15,7 @@{{ $t('auth.interests.info') }}
-{{ errorMessage }} -
{{ $t('auth.oauth.dobInfo') }}
+ +{{ $t('auth.oauth.dobInfo') }}
- - +{{ $t('auth.forgotPassword.step3Info') }}
+ +{{ $t('auth.forgotPassword.step3Info') }}
- -{{ passwordError }}
{{ matchError }}
-โ Passwords match
++ โ Passwords match +
{{ validationError }}
@@ -54,27 +60,27 @@ > {{ $t('auth.common.next') }} -
+ {{ $t('auth.login.switchPrompt') }}
- {{ $t('auth.login.switchPrompt') }}
-
{{ passwordError }}
+ @blur="validatePasswordField" + @input="clearPasswordError" + > ++ {{ passwordError }} +
+
{{ errorMessage }}
@@ -64,24 +81,24 @@
- {{ $t('auth.login.switchPrompt') }}
-
+ {{ $t('auth.login.switchPrompt') }}
+
{{ $t('auth.finalRegister.info') }}
- - -- {{ errorMessage }} -
- - -+ {{ $t('auth.finalRegister.info') }} +
+ + ++ {{ errorMessage }} +
+ + +{{ passwordError }}
+ @blur="validatePasswordField" + @input="clearPasswordError" + > ++ {{ passwordError }} +
{{ $t('auth.finalRegister.passwordHint') }}
++ {{ $t('auth.finalRegister.passwordHint') }} +
{{ nameError }}
{{ emailError }}
{{ $t('auth.signup.dobInfo') }}
{{ dobError }}
@@ -60,15 +71,27 @@ v-model="month" class="w-full bg-primary text-primary cursor-pointer border border-primary rounded-md px-4 py-3 focus:outline-none focus:border-blue appearance-none shadow-sm transition-colors" > - - + โผโผ @@ -79,13 +102,27 @@ v-model="day" class="w-full bg-primary text-primary cursor-pointer border border-primary rounded-md px-4 py-3 focus:outline-none focus:border-blue appearance-none shadow-sm transition-colors" > - - + + โผโผ @@ -96,40 +133,54 @@ v-model="year" class="w-full bg-primary text-primary cursor-pointer border border-primary rounded-md px-4 py-3 focus:outline-none focus:border-blue appearance-none shadow-sm transition-colors" > - - + + โผโผ{{ t('explore.errorLoading') }}
-{{ t('explore.errorLoading') }}
{{ t('explore.noUsersFound') }}
@@ -28,9 +25,8 @@
:disabled="verifyEmailOTPMutation.isPending.value"
required
autofocus
- class="w-full bg-primary text-primary border border-primary rounded-md px-4 py-2
- focus:outline-none focus:border-accent mb-4 shadow-sm transition-colors
- disabled:opacity-50 disabled:cursor-not-allowed" >
+ class="w-full bg-primary text-primary border border-primary rounded-md px-4 py-2 focus:outline-none focus:border-accent mb-4 shadow-sm transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
+ >
@@ -32,7 +32,8 @@
{{ t('settings.display_desc2') }}
diff --git a/app/modules/settings/components/DetailedRow.vue b/app/modules/settings/components/DetailedRow.vue
index 29510a9c..ded4d938 100644
--- a/app/modules/settings/components/DetailedRow.vue
+++ b/app/modules/settings/components/DetailedRow.vue
@@ -3,8 +3,7 @@
id="detailed-link"
:key="category.href"
:to="category.href"
- class="block relative px-5 py-3 rounded hover:bg-hover
- transition-colors text-primary"
+ class="block relative px-5 py-3 rounded hover:bg-hover transition-colors text-primary"
>
{{ t('settings.color') }}
{{ t('settings.background') }}
-