├── .nvmrc
├── Procfile
├── test
├── bootstrap.cjs
├── data
│ ├── github
│ │ ├── github.auth.token.js
│ │ └── github.issue.error.js
│ └── stripe
│ │ ├── stripe.customer.js
│ │ ├── balance.transaction.js
│ │ └── stripe.invoiceitem.js
├── authenticate.sequelize.test.js
└── ping.test.js
├── frontend
├── .mocharc.yaml
├── tests
│ └── components
│ │ └── __mocks__
│ │ ├── fileMock.js
│ │ └── react-intl.js
├── src
│ ├── components
│ │ ├── areas
│ │ │ ├── private
│ │ │ │ └── features
│ │ │ │ │ ├── projects
│ │ │ │ │ ├── project-issue-table.tsx
│ │ │ │ │ └── project-page.styles.ts
│ │ │ │ │ ├── account
│ │ │ │ │ ├── features
│ │ │ │ │ │ ├── account-details
│ │ │ │ │ │ │ └── account-details.css
│ │ │ │ │ │ └── account-skills
│ │ │ │ │ │ │ ├── skill.styles.ts
│ │ │ │ │ │ │ └── my-skill.tsx
│ │ │ │ │ └── components
│ │ │ │ │ │ └── account-tab-main.styles.ts
│ │ │ │ │ └── payout-settings
│ │ │ │ │ └── pages
│ │ │ │ │ └── payout-settings-paypal-page.tsx
│ │ │ └── public
│ │ │ │ └── features
│ │ │ │ ├── welcome
│ │ │ │ └── pages
│ │ │ │ │ ├── home-page.tsx
│ │ │ │ │ └── welcome-page.tsx
│ │ │ │ ├── pricing
│ │ │ │ └── pages
│ │ │ │ │ └── pricing-page.tsx
│ │ │ │ ├── team
│ │ │ │ └── pages
│ │ │ │ │ └── team.tsx
│ │ │ │ ├── session
│ │ │ │ └── pages
│ │ │ │ │ ├── signin-page.tsx
│ │ │ │ │ ├── forgot-page.tsx
│ │ │ │ │ ├── account-activation-page.tsx
│ │ │ │ │ └── signup-page.tsx
│ │ │ │ ├── explore
│ │ │ │ └── pages
│ │ │ │ │ ├── explore-projects-page.tsx
│ │ │ │ │ └── explore-organization-page.tsx
│ │ │ │ └── profile
│ │ │ │ └── pages
│ │ │ │ └── profile-page.tsx
│ │ └── design-library
│ │ │ ├── organisms
│ │ │ ├── forms
│ │ │ │ ├── paypal-info-form
│ │ │ │ │ └── paypal-info-form.tsx
│ │ │ │ ├── bank-account-forms
│ │ │ │ │ └── bank-account-form
│ │ │ │ │ │ └── bank-account-form.styles.ts
│ │ │ │ ├── payout-forms
│ │ │ │ │ ├── payout-request-form
│ │ │ │ │ │ └── payout-request-form.styles.ts
│ │ │ │ │ └── payout-schedule-form
│ │ │ │ │ │ ├── payout-schedule-form.styles.ts
│ │ │ │ │ │ └── payout-schedule-form.stories.tsx
│ │ │ │ ├── price-forms
│ │ │ │ │ └── price-plan-form
│ │ │ │ │ │ └── price-plan-form.styles.ts
│ │ │ │ ├── signup-forms
│ │ │ │ │ └── signup-signin
│ │ │ │ │ │ ├── signup-signin.stories.tsx
│ │ │ │ │ │ └── signup-signin.styles.ts
│ │ │ │ ├── payment-request-forms
│ │ │ │ │ └── payment-request-form
│ │ │ │ │ │ └── payment-request-form.styles.ts
│ │ │ │ ├── issue-forms
│ │ │ │ │ └── import-issue
│ │ │ │ │ │ └── import-issue.stories.tsx
│ │ │ │ └── subscribe-forms
│ │ │ │ │ └── subscribe-form
│ │ │ │ │ └── subscribe-form.stories.tsx
│ │ │ └── layouts
│ │ │ │ ├── page-layouts
│ │ │ │ └── issue-page-layout
│ │ │ │ │ └── issue-page-layout.styles.ts
│ │ │ │ └── bottom-bar-layouts
│ │ │ │ └── bottom-bar-layout
│ │ │ │ └── bottom-bar-layout.stories.tsx
│ │ │ ├── molecules
│ │ │ ├── cards
│ │ │ │ ├── billing-info-card
│ │ │ │ │ └── billing-info-card.stories.tsx
│ │ │ │ ├── issue-cards
│ │ │ │ │ └── issue-invite-card
│ │ │ │ │ │ └── issue-invite-card.styles.ts
│ │ │ │ ├── payment-cards
│ │ │ │ │ └── wallet-payment-card
│ │ │ │ │ │ └── wallet-payment-card.styles.ts
│ │ │ │ ├── dashboard-cards
│ │ │ │ │ ├── claims-dashboard-card
│ │ │ │ │ │ └── claims-dashboard-card.styles.ts
│ │ │ │ │ ├── payments-dashboard-card
│ │ │ │ │ │ └── payments-dashboard-card.styles.ts
│ │ │ │ │ ├── payouts-dashboard-card
│ │ │ │ │ │ └── payouts-dashboard-card.styles.ts
│ │ │ │ │ ├── wallets-dashboard-card
│ │ │ │ │ │ └── wallets-dashboard-card.styles.ts
│ │ │ │ │ ├── bank-account-dashboard-card
│ │ │ │ │ │ ├── bank-account-dashboard-card.styles.ts
│ │ │ │ │ │ └── bank-account-dashboard-card.stories.tsx
│ │ │ │ │ ├── my-issues-dashboard-card
│ │ │ │ │ │ └── my-issue-dashboard-card.styles.ts
│ │ │ │ │ ├── payment-requests-dashboard-card
│ │ │ │ │ │ └── payment-requests-dashboard-card.styles.ts
│ │ │ │ │ └── dashboard-card-list
│ │ │ │ │ │ └── dashboard-card-list.styles.ts
│ │ │ │ ├── project-card
│ │ │ │ │ └── project-card.styles.ts
│ │ │ │ ├── organization-card
│ │ │ │ │ └── organization-card.styles.ts
│ │ │ │ ├── spot-card
│ │ │ │ │ └── spot-card.styles.ts
│ │ │ │ └── balance-card
│ │ │ │ │ └── balance-card.styles.ts
│ │ │ ├── drawers
│ │ │ │ ├── actions
│ │ │ │ │ └── payments
│ │ │ │ │ │ └── issue-order-details-action
│ │ │ │ │ │ └── issue-order-details.styles.ts
│ │ │ │ ├── issue-offer-drawer
│ │ │ │ │ └── issue-offer-drawer.styles.ts
│ │ │ │ ├── drawer
│ │ │ │ │ ├── drawer-actions
│ │ │ │ │ │ └── drawer-actions.styles.ts
│ │ │ │ │ └── drawer.styles.ts
│ │ │ │ └── offer-drawer
│ │ │ │ │ └── components
│ │ │ │ │ ├── offer-drawer-create.styles.ts
│ │ │ │ │ └── actions.styles.ts
│ │ │ ├── tables
│ │ │ │ └── section-table
│ │ │ │ │ ├── section-table-custom-fields
│ │ │ │ │ ├── base
│ │ │ │ │ │ ├── status-field
│ │ │ │ │ │ │ └── status-field.stories.tsx
│ │ │ │ │ │ ├── action-field
│ │ │ │ │ │ │ └── action-field.tsx
│ │ │ │ │ │ ├── text-field
│ │ │ │ │ │ │ ├── text-field.tsx
│ │ │ │ │ │ │ └── text-field.stories.tsx
│ │ │ │ │ │ ├── created-field
│ │ │ │ │ │ │ ├── created-field.stories.tsx
│ │ │ │ │ │ │ └── created-field.tsx
│ │ │ │ │ │ └── amount-field
│ │ │ │ │ │ │ └── amount-field.stories.tsx
│ │ │ │ │ ├── issue
│ │ │ │ │ │ ├── issue-status-field
│ │ │ │ │ │ │ └── issue-status-field.tsx
│ │ │ │ │ │ ├── issue-created-field
│ │ │ │ │ │ │ ├── issue-created-field.tsx
│ │ │ │ │ │ │ └── issue-created-field.stories.tsx
│ │ │ │ │ │ └── issue-price-field
│ │ │ │ │ │ │ ├── issue-price-field.tsx
│ │ │ │ │ │ │ └── issue-price-field.stories.tsx
│ │ │ │ │ ├── payouts
│ │ │ │ │ │ └── payout-status-field
│ │ │ │ │ │ │ └── payout-status-field.tsx
│ │ │ │ │ ├── transfer
│ │ │ │ │ │ └── transfer-status-field
│ │ │ │ │ │ │ └── transfer-status-field.tsx
│ │ │ │ │ └── payment-request
│ │ │ │ │ │ └── payment-request-active-field
│ │ │ │ │ │ └── payment-request-active-field.stories.tsx
│ │ │ │ │ └── section-table-pagination-actions
│ │ │ │ │ └── section-table-pagination-actions.styles.ts
│ │ │ ├── lists
│ │ │ │ ├── requirements-list
│ │ │ │ │ └── requirement-list.styles.ts
│ │ │ │ ├── issue-author-list
│ │ │ │ │ └── issue-author-list.styles.ts
│ │ │ │ ├── issue-payments-list
│ │ │ │ │ └── issue-payments-list.styles.ts
│ │ │ │ ├── pickup-tag-list
│ │ │ │ │ └── pickup-tag-list.styles.ts
│ │ │ │ └── project-list
│ │ │ │ │ └── project-list-full
│ │ │ │ │ └── project-list-full.styles.ts
│ │ │ ├── dialogs
│ │ │ │ ├── issue-invite-dialog
│ │ │ │ │ └── issue-invite-dialog.styles.ts
│ │ │ │ ├── privacy-dialog
│ │ │ │ │ └── privacy-dialog.tsx
│ │ │ │ ├── terms-dialog
│ │ │ │ │ └── terms-dialog.tsx
│ │ │ │ ├── country-picker-dialog
│ │ │ │ │ └── country-picker-dialog.stories.tsx
│ │ │ │ └── bottom-section-dialog
│ │ │ │ │ └── bottom-section-dialog.stories.tsx
│ │ │ ├── headers
│ │ │ │ ├── profile-secondary-header
│ │ │ │ │ └── profile-secondary-header.styles.ts
│ │ │ │ └── profile-main-header
│ │ │ │ │ └── profile-main-header.styles.ts
│ │ │ ├── menus
│ │ │ │ ├── account-menu
│ │ │ │ │ └── account-menu.styles.ts
│ │ │ │ └── topbar-menu
│ │ │ │ │ └── topbar-menu.stories.tsx
│ │ │ ├── content
│ │ │ │ ├── empty
│ │ │ │ │ ├── empty-claim
│ │ │ │ │ │ └── empty-claim.stories.tsx
│ │ │ │ │ ├── empty-payout
│ │ │ │ │ │ └── empty-payout.stories.tsx
│ │ │ │ │ ├── empty-bank-account
│ │ │ │ │ │ └── empty-bank-account.stories.tsx
│ │ │ │ │ └── empty-payment-request
│ │ │ │ │ │ └── empty-payment-request.stories.tsx
│ │ │ │ ├── introduction
│ │ │ │ │ └── introduction.stories.tsx
│ │ │ │ └── issue-content
│ │ │ │ │ ├── issue-content-placeholder.tsx
│ │ │ │ │ └── issue-content.styles.ts
│ │ │ ├── breadcrumbs
│ │ │ │ └── breadcrumb
│ │ │ │ │ └── breadcrumb.styles.ts
│ │ │ ├── form-section
│ │ │ │ ├── login-form
│ │ │ │ │ ├── login-form-signin
│ │ │ │ │ │ └── login-form-signin.stories.tsx
│ │ │ │ │ ├── login-form-forgot
│ │ │ │ │ │ └── login-form-forgot.stories.tsx
│ │ │ │ │ └── login-form-reset
│ │ │ │ │ │ └── login-form-reset.stories.tsx
│ │ │ │ ├── card-number-form
│ │ │ │ │ └── card-number-form.tsx
│ │ │ │ └── personal-details-form
│ │ │ │ │ └── personal-details.stories.tsx
│ │ │ ├── tabs
│ │ │ │ ├── bank-account-tabs
│ │ │ │ │ └── bank-account-tabs.stories.tsx
│ │ │ │ └── payout-settings-tabs
│ │ │ │ │ └── payout-settings-tabs.stories.tsx
│ │ │ ├── switchers
│ │ │ │ └── language-switcher
│ │ │ │ │ ├── language-switcher.styles.ts
│ │ │ │ │ └── language-switcher.stories.tsx
│ │ │ └── sections
│ │ │ │ └── stats-bar
│ │ │ │ └── stats-bar.stories.tsx
│ │ │ ├── pages
│ │ │ ├── public-pages
│ │ │ │ ├── session-public-pages
│ │ │ │ │ └── account-activation
│ │ │ │ │ │ └── account-activation.stories.tsx
│ │ │ │ ├── issue-public-page
│ │ │ │ │ └── issue-public-page.styles.tsx
│ │ │ │ ├── user-profile-public-page
│ │ │ │ │ └── user-profile-public-page.styles.ts
│ │ │ │ ├── explorer-public-page
│ │ │ │ │ └── explorer-public-page
│ │ │ │ │ │ └── explorer-public-page.styles.ts
│ │ │ │ ├── four-o-four-public-page
│ │ │ │ │ └── four-o-four.stories.tsx
│ │ │ │ └── pricing-public-page
│ │ │ │ │ └── pricing-public-page.stories.tsx
│ │ │ └── private-pages
│ │ │ │ ├── settings-pages
│ │ │ │ ├── account-settings
│ │ │ │ │ └── account-settings.tsx
│ │ │ │ └── payout-settings
│ │ │ │ │ └── payout-settings.tsx
│ │ │ │ └── data-pages
│ │ │ │ └── primary-data-page
│ │ │ │ └── primary-data-page.styles.ts
│ │ │ ├── atoms
│ │ │ ├── transitions
│ │ │ │ └── transition.js
│ │ │ ├── buttons
│ │ │ │ ├── import-issue-button
│ │ │ │ │ ├── import-issue-button.styles.ts
│ │ │ │ │ └── import-issue-button.stories.tsx
│ │ │ │ ├── button
│ │ │ │ │ └── button.styles.ts
│ │ │ │ ├── issue-actions
│ │ │ │ │ └── issue-actions.tsx
│ │ │ │ ├── signin-buttons
│ │ │ │ │ └── signin-buttons.stories.tsx
│ │ │ │ └── provider-login-buttons
│ │ │ │ │ ├── provider-login-buttons.stories.tsx
│ │ │ │ │ └── provider-login-buttons.styles.ts
│ │ │ ├── inputs
│ │ │ │ ├── fields
│ │ │ │ │ ├── field
│ │ │ │ │ │ └── field.styles.ts
│ │ │ │ │ ├── account-type-field
│ │ │ │ │ │ └── account-type.stories.tsx
│ │ │ │ │ ├── birth-date-field
│ │ │ │ │ │ └── birth-date-field.stories.tsx
│ │ │ │ │ ├── phone-number-field
│ │ │ │ │ │ └── phone-number-field.stories.tsx
│ │ │ │ │ ├── bank-select-field
│ │ │ │ │ │ └── bank-select-field.stories.tsx
│ │ │ │ │ └── country-field
│ │ │ │ │ │ └── country-field.stories.tsx
│ │ │ │ ├── input-comment
│ │ │ │ │ ├── input-comment.styles.ts
│ │ │ │ │ └── input-comment.stories.tsx
│ │ │ │ ├── checkbox-terms
│ │ │ │ │ ├── checkbox-terms.styles.ts
│ │ │ │ │ └── checkbox-terms.stories.tsx
│ │ │ │ ├── radios
│ │ │ │ │ ├── radios.styles.ts
│ │ │ │ │ └── radios.stories.tsx
│ │ │ │ ├── solution-input
│ │ │ │ │ └── solution-input.styles.ts
│ │ │ │ ├── checkboxes
│ │ │ │ │ └── checkboxes.styles.ts
│ │ │ │ ├── price-input
│ │ │ │ │ └── price-input.styles.ts
│ │ │ │ ├── dropdowns
│ │ │ │ │ └── issue-level-dropdown
│ │ │ │ │ │ └── issue-level-dropdown.stories.tsx
│ │ │ │ └── fieldset
│ │ │ │ │ └── fieldset.tsx
│ │ │ ├── alerts
│ │ │ │ ├── account-requirements
│ │ │ │ │ └── account-requirements.styles.ts
│ │ │ │ ├── alert
│ │ │ │ │ └── alert.styles.ts
│ │ │ │ └── simple-info
│ │ │ │ │ ├── simple-info.tsx
│ │ │ │ │ └── simple-info.styles.ts
│ │ │ ├── filters
│ │ │ │ ├── issue-filter
│ │ │ │ │ └── issue-filter.styles.ts
│ │ │ │ └── issue-status-filter
│ │ │ │ │ └── issue-status-filter.stories.tsx
│ │ │ ├── loaders
│ │ │ │ ├── placeholders
│ │ │ │ │ ├── avatar-placeholder.styles.ts
│ │ │ │ │ ├── avatar-placeholder.tsx
│ │ │ │ │ └── avatar-placeholder.stories.tsx
│ │ │ │ └── loader
│ │ │ │ │ ├── loader.tsx
│ │ │ │ │ ├── loader.stories.tsx
│ │ │ │ │ └── loader.styles.ts
│ │ │ ├── typography
│ │ │ │ ├── secondary-title
│ │ │ │ │ └── secondary-title.stories.tsx
│ │ │ │ └── context-title
│ │ │ │ │ └── context-title.tsx
│ │ │ └── status
│ │ │ │ └── issue-status
│ │ │ │ └── issue-status.stories.tsx
│ │ │ └── templates
│ │ │ └── base
│ │ │ ├── public-base
│ │ │ └── public-base.styles.ts
│ │ │ └── private-base
│ │ │ └── private-base.styles.ts
│ ├── images
│ │ ├── bounty.png
│ │ ├── brazil.png
│ │ ├── deal.png
│ │ ├── funds.png
│ │ ├── Fallback.png
│ │ ├── login_bg.png
│ │ ├── octodex.png
│ │ ├── sharing.png
│ │ ├── welcome1.png
│ │ ├── welcome2.png
│ │ ├── welcome3.png
│ │ ├── discount-99.png
│ │ ├── github-logo.png
│ │ ├── gitlab-logo.png
│ │ ├── gitpay-app.png
│ │ ├── gitpay-logo.png
│ │ ├── logo-symbol.png
│ │ ├── paypal-icon.png
│ │ ├── slack-logo.png
│ │ ├── task-cover.png
│ │ ├── task-icon.png
│ │ ├── time-icon.png
│ │ ├── tools-icon.png
│ │ ├── welcome-bg.png
│ │ ├── city-software.png
│ │ ├── logo-complete.png
│ │ ├── notifications.png
│ │ ├── payment-icon.png
│ │ ├── avatar-alexandre.png
│ │ ├── bitbucket-logo.png
│ │ ├── clients
│ │ │ ├── client1.png
│ │ │ ├── client2.png
│ │ │ ├── client3.png
│ │ │ ├── electron-logo.png
│ │ │ ├── etherpad-logo.png
│ │ │ ├── fitnowbrazil-logo.png
│ │ │ └── sitespeedio-logo.png
│ │ ├── countries
│ │ │ ├── belize.png
│ │ │ ├── brazil.png
│ │ │ ├── canada.png
│ │ │ ├── cyprus.png
│ │ │ ├── france.png
│ │ │ ├── ghana.png
│ │ │ ├── greece.png
│ │ │ ├── india.png
│ │ │ ├── italy.png
│ │ │ ├── japan.png
│ │ │ ├── jordan.png
│ │ │ ├── kenya.png
│ │ │ ├── latvia.png
│ │ │ ├── malta.png
│ │ │ ├── mexico.png
│ │ │ ├── norway.png
│ │ │ ├── poland.png
│ │ │ ├── spain.png
│ │ │ ├── sweden.png
│ │ │ ├── turkey.png
│ │ │ ├── albania.png
│ │ │ ├── austria.png
│ │ │ ├── belgium.png
│ │ │ ├── bulgaria.png
│ │ │ ├── colombia.png
│ │ │ ├── croatia.png
│ │ │ ├── default.png
│ │ │ ├── denmark.png
│ │ │ ├── estonia.png
│ │ │ ├── finland.png
│ │ │ ├── germany.png
│ │ │ ├── hungary.png
│ │ │ ├── ireland.png
│ │ │ ├── malaysia.png
│ │ │ ├── nigeria.png
│ │ │ ├── pakistan.png
│ │ │ ├── portugal.png
│ │ │ ├── romania.png
│ │ │ ├── slovakia.png
│ │ │ ├── slovenia.png
│ │ │ ├── thailand.png
│ │ │ ├── australia.png
│ │ │ ├── bangladesh.png
│ │ │ ├── gibraltar.png
│ │ │ ├── hong-kong.png
│ │ │ ├── indonesia.png
│ │ │ ├── lithuania.png
│ │ │ ├── luxembourg.png
│ │ │ ├── netherlands.png
│ │ │ ├── new-zealand.png
│ │ │ ├── philippine.png
│ │ │ ├── puerto-rico.png
│ │ │ ├── singapore.png
│ │ │ ├── sri-lanka.png
│ │ │ ├── switzerland.png
│ │ │ ├── liechtenstein.png
│ │ │ ├── south-africa.png
│ │ │ ├── czech-republic.png
│ │ │ ├── united-kingdom.png
│ │ │ ├── united-arab-emirates.png
│ │ │ └── united-states-of-america.png
│ │ ├── credit-card-icon.png
│ │ ├── payment-icon-alt.png
│ │ ├── teams
│ │ │ ├── profile_rq.jpg
│ │ │ ├── core-team-mayna.jpg
│ │ │ ├── wharley-team-member.jpg
│ │ │ ├── headhunter-team-member1.png
│ │ │ └── headhunter-team-member2.png
│ │ ├── welcome-teamwork.png
│ │ ├── worknenjoy-logo.png
│ │ ├── github-logo-black.png
│ │ ├── github-logo-bottom.png
│ │ ├── gitpay-logo-small.png
│ │ ├── landingPage_People.png
│ │ ├── logo-complete-gray.png
│ │ ├── logo-symbol-small.png
│ │ ├── main-background01.jpg
│ │ ├── main-background02.jpg
│ │ ├── main-background03.jpg
│ │ ├── main-background04.jpg
│ │ ├── main-background05.jpg
│ │ ├── main-background06.jpg
│ │ ├── main-background07.jpg
│ │ ├── main-background08.jpg
│ │ ├── main-background09.jpg
│ │ ├── welcome-companies.png
│ │ ├── welcome-freelancer.png
│ │ ├── bitbucket-logo-blue.png
│ │ ├── core-team-page-asset.png
│ │ ├── backgrounds
│ │ │ └── bg-mail-top.png
│ │ ├── github-logo-alternative.png
│ │ ├── octodex-professortocat.png
│ │ ├── material-ui-icon-language.png
│ │ ├── octodex-motherhubbertocat.png
│ │ ├── united-states-of-america.png
│ │ ├── gitpay-explore-task-screenshot.png
│ │ ├── collections
│ │ │ └── collection-flat-build.png
│ │ └── octodex-motherhubbertocat-transparent.png
│ ├── types
│ │ ├── card.ts
│ │ └── table.ts
│ ├── common
│ │ ├── selectors
│ │ │ └── user
│ │ │ │ └── getUser.js
│ │ └── operator
│ │ │ └── if.js
│ ├── index.d.ts
│ ├── index.js
│ ├── containers
│ │ ├── home.js
│ │ ├── public-container.js
│ │ ├── welcome.js
│ │ ├── account-activation.ts
│ │ ├── team.js
│ │ ├── task-solve.js
│ │ ├── task-filter.js
│ │ ├── profile-head.js
│ │ ├── provider-login-buttons.tsx
│ │ ├── bottom.js
│ │ ├── project-explorer.js
│ │ └── info.js
│ ├── main
│ │ ├── authOrApp.js
│ │ ├── app.css
│ │ └── routes-sitemap.js
│ ├── utils
│ │ ├── valid-account.tsx
│ │ └── format-currency.tsx
│ ├── actions
│ │ └── helpers
│ │ │ └── index.js
│ ├── reducers
│ │ └── teamReducer.js
│ ├── styleguide
│ │ └── components
│ │ │ └── Page.tsx
│ └── stories
│ │ └── Header.stories.jsx
├── public
│ ├── favicon-gitpay.ico
│ └── lottie
│ │ ├── mission.lottie
│ │ ├── coworking.lottie
│ │ ├── how-it-works.lottie
│ │ ├── startup-life.lottie
│ │ ├── developer-main.lottie
│ │ └── developer-team.lottie
├── translation.js
├── build
│ └── messages
│ │ └── src
│ │ └── components
│ │ └── profile
│ │ └── preferences.json
└── .storybook
│ └── utils
│ └── generateTableData.ts
├── .vscode
├── settings.json
└── launch.json
├── .prettierignore
├── src
├── modules
│ ├── paymentRequestBalance
│ │ └── index.ts
│ ├── paymentRequestPayments
│ │ └── index.ts
│ ├── label
│ │ ├── index.js
│ │ └── labelSearch.js
│ ├── roles
│ │ ├── index.js
│ │ └── roleExists.js
│ ├── assigns
│ │ ├── index.js
│ │ └── assignExists.js
│ ├── members
│ │ └── index.js
│ ├── coupon
│ │ └── index.js
│ ├── types
│ │ ├── index.js
│ │ └── typeSearch.js
│ ├── contact
│ │ ├── index.js
│ │ └── contactRecruiters.js
│ ├── team
│ │ ├── index.js
│ │ └── requestJoinCoreTeam.js
│ ├── projects
│ │ ├── index.js
│ │ └── projectList.js
│ ├── webhooks
│ │ └── payouts
│ │ │ └── index.ts
│ ├── language
│ │ ├── index.js
│ │ ├── projectProgrammingLanguage.js
│ │ └── languageSearch.js
│ ├── offers
│ │ ├── index.js
│ │ ├── updateOffer.js
│ │ └── offerExists.js
│ ├── payouts
│ │ ├── index.js
│ │ └── payoutSearch.js
│ ├── wallets
│ │ ├── index.js
│ │ ├── walletList.js
│ │ └── walletBuilds.js
│ ├── paymentRequests
│ │ ├── index.js
│ │ └── paymentRequestList.js
│ ├── mail
│ │ ├── handleResponse.js
│ │ └── handleError.js
│ ├── paymentRequestsTransfers
│ │ ├── paymentRequestsTransfersBuilds.js
│ │ ├── paymentRequestsTransfersUpdate.js
│ │ └── paymentRequestsTransferList.js
│ ├── shared
│ │ └── stripe
│ │ │ └── stripe.js
│ ├── transfers
│ │ └── index.js
│ ├── users
│ │ ├── userFetch.js
│ │ └── userAccountBalance.js
│ ├── walletOrders
│ │ ├── index.js
│ │ └── walletOrderList.js
│ ├── organizations
│ │ ├── index.js
│ │ └── organizationBuilds.js
│ ├── tasks
│ │ ├── taskExists.js
│ │ ├── taskMessageAuthor.js
│ │ └── taskSolutionGet.js
│ └── orders
│ │ ├── orderExists.js
│ │ └── orderFetch.js
├── index.ts
├── models
│ ├── role.js
│ ├── planSchema.js
│ ├── type.js
│ ├── assign.js
│ ├── label.js
│ ├── member.js
│ ├── coupon.js
│ └── projectProgrammingLanguage.js
├── app
│ ├── routes
│ │ ├── contact.js
│ │ ├── team.js
│ │ ├── dashboard.ts
│ │ ├── types.js
│ │ ├── label.js
│ │ ├── info.js
│ │ ├── paymentRequestBalance.ts
│ │ ├── paymentRequestPayment.ts
│ │ ├── projects.js
│ │ ├── offer.js
│ │ ├── coupon.js
│ │ ├── language.js
│ │ ├── payout.js
│ │ ├── transfer.js
│ │ ├── paymentRequest.js
│ │ ├── wallet.js
│ │ ├── walletOrder.js
│ │ ├── taskSolutions.js
│ │ ├── webhooks.js
│ │ └── organization.js
│ └── controllers
│ │ ├── coupon.js
│ │ ├── type.js
│ │ ├── offer.js
│ │ ├── user
│ │ └── user.ts
│ │ ├── contact.js
│ │ ├── team.js
│ │ ├── label.js
│ │ ├── payment-request-balance.ts
│ │ └── payment-request-payment.ts
├── db
│ └── migrations
│ │ ├── 20180306212049-users.js
│ │ ├── 20190118000202-add-os-to-users.js
│ │ ├── 20180314205257-add-repos-to-user.js
│ │ ├── 20180626131108-add-title-to-task.js
│ │ ├── 20180703190806-add-token-to-order.js
│ │ ├── 20190118000224-add-skills-to-user.js
│ │ ├── 20180314193229-add-website-to-user.js
│ │ ├── 20180930181704-add-country-to-user.js
│ │ ├── 20210122093719-add-prviate-to-task.js
│ │ ├── 20180314204119-add-username-to-user.js
│ │ ├── 20180318174217-add-provider-to-user.js
│ │ ├── 20180524213355-add-account-to-user.js
│ │ ├── 20180701191416-add-provider-to-order.js
│ │ ├── 20180703154147-add-payer-id-to-order.js
│ │ ├── 20180707141413-add-paypal-to-user.js
│ │ ├── 20180930180435-add-language-to-user.js
│ │ ├── 20190116200530-add-mailflag-to-task.js
│ │ ├── 20190118000217-add-languages-to-user.js
│ │ ├── 20190328210733-add-status-to-assigns.js
│ │ ├── 20200422012929-add-message-to-assign.js
│ │ ├── 20180314210833-add-picture-url-to-user.js
│ │ ├── 20180511130542-add-customer-to-user.js
│ │ ├── 20180610112853-add-transfer-to-task.js
│ │ ├── 20180626132835-add-repourl-to-user.js
│ │ ├── 20180707140456-add-transfer-to-order.js
│ │ ├── 20210202164305-add-description-to-task.js
│ │ ├── 20180703154101-add-payment-url-to-order.js
│ │ ├── 20190424115813-add-open-for-jobs-to-users.js
│ │ ├── 20200707091140-add-transfer_group-to-order.js
│ │ ├── 20200822085416-addProviderUsernameToUser.js
│ │ ├── 20191015182526-add-authorization-id-to-order.js
│ │ ├── 20190118000232-add-receive-notifications-to-user.js
│ │ ├── 20220404015828-add-active-to-user.js
│ │ ├── 20180606135249-add-assigned-to-task.js
│ │ ├── 20210405203758-change-order-source-not-unique.js
│ │ ├── 20201217203513-add-projectId-to-task.js
│ │ ├── 20210605214301-add-coupon-to-order.js
│ │ ├── 20220412120201-change-offer-comment-char-limit.js
│ │ ├── 20201218194527-add-organizationId-to-project.js
│ │ ├── 20251211223254-add-arrival-date-to-payout.ts
│ │ └── 20251211232235-add-reference-number-to-payout.ts
└── config
│ └── config.json
├── .prettierrc
├── .eslintignore
├── playwright.config.js
├── .editorconfig
├── playwright
└── example.spec.js
├── .travis.yml
├── .sequelizerc
├── .github
└── ISSUE_TEMPLATE
│ └── config.yml
├── crowdin.yml
├── docker-compose.test.yml
├── tsconfig.json
├── pmd.xml
└── .devcontainer
├── devcontainer.json
└── docker-compose.yml
/.nvmrc:
--------------------------------------------------------------------------------
1 | v18.20.8
2 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: npm start
2 |
--------------------------------------------------------------------------------
/test/bootstrap.cjs:
--------------------------------------------------------------------------------
1 | require('tsx/cjs');
--------------------------------------------------------------------------------
/frontend/.mocharc.yaml:
--------------------------------------------------------------------------------
1 | require: '@babel/register'
2 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "vsicons.presets.angular": true
3 | }
4 |
--------------------------------------------------------------------------------
/frontend/tests/components/__mocks__/fileMock.js:
--------------------------------------------------------------------------------
1 | module.exports = ''
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | build
4 | coverage
5 | *.log
6 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/private/features/projects/project-issue-table.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/paypal-info-form/paypal-info-form.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/modules/paymentRequestBalance/index.ts:
--------------------------------------------------------------------------------
1 | export * from './paymentRequestBalanceList'
2 |
--------------------------------------------------------------------------------
/src/modules/paymentRequestPayments/index.ts:
--------------------------------------------------------------------------------
1 | export * from './paymentRequestPaymentList'
2 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/billing-info-card/billing-info-card.stories.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/images/bounty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/bounty.png
--------------------------------------------------------------------------------
/frontend/src/images/brazil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/brazil.png
--------------------------------------------------------------------------------
/frontend/src/images/deal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/deal.png
--------------------------------------------------------------------------------
/frontend/src/images/funds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/funds.png
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/layouts/page-layouts/issue-page-layout/issue-page-layout.styles.ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/images/Fallback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/Fallback.png
--------------------------------------------------------------------------------
/frontend/src/images/login_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/login_bg.png
--------------------------------------------------------------------------------
/frontend/src/images/octodex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/octodex.png
--------------------------------------------------------------------------------
/frontend/src/images/sharing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/sharing.png
--------------------------------------------------------------------------------
/frontend/src/images/welcome1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/welcome1.png
--------------------------------------------------------------------------------
/frontend/src/images/welcome2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/welcome2.png
--------------------------------------------------------------------------------
/frontend/src/images/welcome3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/welcome3.png
--------------------------------------------------------------------------------
/frontend/public/favicon-gitpay.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/public/favicon-gitpay.ico
--------------------------------------------------------------------------------
/frontend/src/images/discount-99.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/discount-99.png
--------------------------------------------------------------------------------
/frontend/src/images/github-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/github-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/gitlab-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/gitlab-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/gitpay-app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/gitpay-app.png
--------------------------------------------------------------------------------
/frontend/src/images/gitpay-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/gitpay-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/logo-symbol.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/logo-symbol.png
--------------------------------------------------------------------------------
/frontend/src/images/paypal-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/paypal-icon.png
--------------------------------------------------------------------------------
/frontend/src/images/slack-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/slack-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/task-cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/task-cover.png
--------------------------------------------------------------------------------
/frontend/src/images/task-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/task-icon.png
--------------------------------------------------------------------------------
/frontend/src/images/time-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/time-icon.png
--------------------------------------------------------------------------------
/frontend/src/images/tools-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/tools-icon.png
--------------------------------------------------------------------------------
/frontend/src/images/welcome-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/welcome-bg.png
--------------------------------------------------------------------------------
/frontend/public/lottie/mission.lottie:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/public/lottie/mission.lottie
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/public-pages/session-public-pages/account-activation/account-activation.stories.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/images/city-software.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/city-software.png
--------------------------------------------------------------------------------
/frontend/src/images/logo-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/logo-complete.png
--------------------------------------------------------------------------------
/frontend/src/images/notifications.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/notifications.png
--------------------------------------------------------------------------------
/frontend/src/images/payment-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/payment-icon.png
--------------------------------------------------------------------------------
/src/modules/label/index.js:
--------------------------------------------------------------------------------
1 | const labelSearch = require('./labelSearch')
2 |
3 | module.exports = {
4 | labelSearch
5 | }
6 |
--------------------------------------------------------------------------------
/src/modules/roles/index.js:
--------------------------------------------------------------------------------
1 | const roleExists = require('./roleExists')
2 |
3 | module.exports = {
4 | roleExists
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/public/lottie/coworking.lottie:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/public/lottie/coworking.lottie
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/drawers/actions/payments/issue-order-details-action/issue-order-details.styles.ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/images/avatar-alexandre.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/avatar-alexandre.png
--------------------------------------------------------------------------------
/frontend/src/images/bitbucket-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/bitbucket-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/clients/client1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/clients/client1.png
--------------------------------------------------------------------------------
/frontend/src/images/clients/client2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/clients/client2.png
--------------------------------------------------------------------------------
/frontend/src/images/clients/client3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/clients/client3.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/belize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/belize.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/brazil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/brazil.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/canada.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/canada.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/cyprus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/cyprus.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/france.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/france.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/ghana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/ghana.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/greece.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/greece.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/india.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/india.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/italy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/italy.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/japan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/japan.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/jordan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/jordan.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/kenya.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/kenya.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/latvia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/latvia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/malta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/malta.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/mexico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/mexico.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/norway.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/norway.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/poland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/poland.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/spain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/spain.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/sweden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/sweden.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/turkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/turkey.png
--------------------------------------------------------------------------------
/frontend/src/images/credit-card-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/credit-card-icon.png
--------------------------------------------------------------------------------
/frontend/src/images/payment-icon-alt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/payment-icon-alt.png
--------------------------------------------------------------------------------
/frontend/src/images/teams/profile_rq.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/teams/profile_rq.jpg
--------------------------------------------------------------------------------
/frontend/src/images/welcome-teamwork.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/welcome-teamwork.png
--------------------------------------------------------------------------------
/frontend/src/images/worknenjoy-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/worknenjoy-logo.png
--------------------------------------------------------------------------------
/src/modules/assigns/index.js:
--------------------------------------------------------------------------------
1 | const assignExists = require('./assignExists')
2 |
3 | module.exports = {
4 | assignExists
5 | }
6 |
--------------------------------------------------------------------------------
/src/modules/members/index.js:
--------------------------------------------------------------------------------
1 | const memberExists = require('./memberExists')
2 |
3 | module.exports = {
4 | memberExists
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/public/lottie/how-it-works.lottie:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/public/lottie/how-it-works.lottie
--------------------------------------------------------------------------------
/frontend/public/lottie/startup-life.lottie:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/public/lottie/startup-life.lottie
--------------------------------------------------------------------------------
/frontend/src/images/countries/albania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/albania.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/austria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/austria.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/belgium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/belgium.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/bulgaria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/bulgaria.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/colombia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/colombia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/croatia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/croatia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/default.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/denmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/denmark.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/estonia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/estonia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/finland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/finland.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/germany.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/germany.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/hungary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/hungary.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/ireland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/ireland.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/malaysia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/malaysia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/nigeria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/nigeria.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/pakistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/pakistan.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/portugal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/portugal.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/romania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/romania.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/slovakia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/slovakia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/slovenia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/slovenia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/thailand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/thailand.png
--------------------------------------------------------------------------------
/frontend/src/images/github-logo-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/github-logo-black.png
--------------------------------------------------------------------------------
/frontend/src/images/github-logo-bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/github-logo-bottom.png
--------------------------------------------------------------------------------
/frontend/src/images/gitpay-logo-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/gitpay-logo-small.png
--------------------------------------------------------------------------------
/frontend/src/images/landingPage_People.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/landingPage_People.png
--------------------------------------------------------------------------------
/frontend/src/images/logo-complete-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/logo-complete-gray.png
--------------------------------------------------------------------------------
/frontend/src/images/logo-symbol-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/logo-symbol-small.png
--------------------------------------------------------------------------------
/frontend/src/images/main-background01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background01.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background02.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background03.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background04.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background05.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background06.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background07.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background08.jpg
--------------------------------------------------------------------------------
/frontend/src/images/main-background09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/main-background09.jpg
--------------------------------------------------------------------------------
/frontend/src/images/welcome-companies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/welcome-companies.png
--------------------------------------------------------------------------------
/frontend/src/images/welcome-freelancer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/welcome-freelancer.png
--------------------------------------------------------------------------------
/src/modules/coupon/index.js:
--------------------------------------------------------------------------------
1 | const validateCoupon = require('./validateCoupon')
2 |
3 | module.exports = {
4 | validateCoupon
5 | }
6 |
--------------------------------------------------------------------------------
/src/modules/types/index.js:
--------------------------------------------------------------------------------
1 | const typeSearch = require('./typeSearch')
2 |
3 | module.exports = {
4 | typeSearch: typeSearch
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/public/lottie/developer-main.lottie:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/public/lottie/developer-main.lottie
--------------------------------------------------------------------------------
/frontend/public/lottie/developer-team.lottie:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/public/lottie/developer-team.lottie
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/base/status-field/status-field.stories.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/images/bitbucket-logo-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/bitbucket-logo-blue.png
--------------------------------------------------------------------------------
/frontend/src/images/clients/electron-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/clients/electron-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/clients/etherpad-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/clients/etherpad-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/core-team-page-asset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/core-team-page-asset.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/australia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/australia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/bangladesh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/bangladesh.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/gibraltar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/gibraltar.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/hong-kong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/hong-kong.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/indonesia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/indonesia.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/lithuania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/lithuania.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/luxembourg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/luxembourg.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/netherlands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/netherlands.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/new-zealand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/new-zealand.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/philippine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/philippine.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/puerto-rico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/puerto-rico.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/singapore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/singapore.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/sri-lanka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/sri-lanka.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/switzerland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/switzerland.png
--------------------------------------------------------------------------------
/frontend/src/images/teams/core-team-mayna.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/teams/core-team-mayna.jpg
--------------------------------------------------------------------------------
/frontend/src/images/backgrounds/bg-mail-top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/backgrounds/bg-mail-top.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/liechtenstein.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/liechtenstein.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/south-africa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/south-africa.png
--------------------------------------------------------------------------------
/frontend/src/images/github-logo-alternative.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/github-logo-alternative.png
--------------------------------------------------------------------------------
/frontend/src/images/octodex-professortocat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/octodex-professortocat.png
--------------------------------------------------------------------------------
/src/modules/contact/index.js:
--------------------------------------------------------------------------------
1 | const contactRecruiters = require('./contactRecruiters')
2 |
3 | module.exports = {
4 | contactRecruiters
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/src/images/clients/fitnowbrazil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/clients/fitnowbrazil-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/clients/sitespeedio-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/clients/sitespeedio-logo.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/czech-republic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/czech-republic.png
--------------------------------------------------------------------------------
/frontend/src/images/countries/united-kingdom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/united-kingdom.png
--------------------------------------------------------------------------------
/frontend/src/images/material-ui-icon-language.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/material-ui-icon-language.png
--------------------------------------------------------------------------------
/frontend/src/images/octodex-motherhubbertocat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/octodex-motherhubbertocat.png
--------------------------------------------------------------------------------
/frontend/src/images/teams/wharley-team-member.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/teams/wharley-team-member.jpg
--------------------------------------------------------------------------------
/frontend/src/images/united-states-of-america.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/united-states-of-america.png
--------------------------------------------------------------------------------
/src/modules/team/index.js:
--------------------------------------------------------------------------------
1 | const requestJoinCoreTeam = require('./requestJoinCoreTeam')
2 |
3 | module.exports = {
4 | requestJoinCoreTeam
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/src/types/card.ts:
--------------------------------------------------------------------------------
1 | export type CardProps = {
2 | title: string | React.ReactNode
3 | amount: number
4 | type: 'decimal' | 'centavos'
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/src/images/countries/united-arab-emirates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/united-arab-emirates.png
--------------------------------------------------------------------------------
/frontend/src/images/gitpay-explore-task-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/gitpay-explore-task-screenshot.png
--------------------------------------------------------------------------------
/frontend/src/images/teams/headhunter-team-member1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/teams/headhunter-team-member1.png
--------------------------------------------------------------------------------
/frontend/src/images/teams/headhunter-team-member2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/teams/headhunter-team-member2.png
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import app from './server'
2 |
3 | app.listen(app.get('port'), () => {
4 | console.log('Node app is running on port', app.get('port'))
5 | })
6 |
--------------------------------------------------------------------------------
/frontend/src/common/selectors/user/getUser.js:
--------------------------------------------------------------------------------
1 | export const getUserData = (state) => state.loggedIn.data
2 | export const getCurrentUser = (state) => state.loggedIn
3 |
--------------------------------------------------------------------------------
/frontend/src/images/collections/collection-flat-build.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/collections/collection-flat-build.png
--------------------------------------------------------------------------------
/frontend/src/common/operator/if.js:
--------------------------------------------------------------------------------
1 | export default (props) => {
2 | if (props.test) {
3 | return props.children
4 | } else {
5 | return false
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/frontend/src/images/countries/united-states-of-america.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/countries/united-states-of-america.png
--------------------------------------------------------------------------------
/frontend/src/index.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.png'
2 | declare module '*.jpg'
3 | declare module '*.svg' {
4 | const content: string
5 | export default content
6 | }
7 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "none",
4 | "semi": false,
5 | "printWidth": 100,
6 | "tabWidth": 2,
7 | "arrowParens": "always"
8 | }
9 |
--------------------------------------------------------------------------------
/frontend/src/images/octodex-motherhubbertocat-transparent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/worknenjoy/gitpay/HEAD/frontend/src/images/octodex-motherhubbertocat-transparent.png
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | public
2 | build
3 | node_modules
4 | temp
5 | coverage
6 | test
7 | migrate.js
8 | migration
9 | frontend/stripe-v3.js
10 | frontend/sitemap-builder.js
11 |
12 |
--------------------------------------------------------------------------------
/frontend/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom'
3 |
4 | import App from './main/app'
5 |
6 | ReactDOM.render(, document.getElementById('app'))
7 |
--------------------------------------------------------------------------------
/test/data/github/github.auth.token.js:
--------------------------------------------------------------------------------
1 | module.exports.token = {
2 | access_token: 'e72e16c7e42f292c6912e7710c838347ae178b4a',
3 | scope: 'repo,gist',
4 | token_type: 'bearer'
5 | }
6 |
--------------------------------------------------------------------------------
/playwright.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require('@playwright/test')
2 |
3 | module.exports = defineConfig({
4 | testDir: './playwright',
5 | use: {
6 | headless: true
7 | }
8 | })
9 |
--------------------------------------------------------------------------------
/src/modules/projects/index.js:
--------------------------------------------------------------------------------
1 | const projectFetch = require('./projectFetch')
2 | const projectList = require('./projectList')
3 |
4 | module.exports = {
5 | projectFetch,
6 | projectList
7 | }
8 |
--------------------------------------------------------------------------------
/src/models/role.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const Role = sequelize.define('Role', {
3 | name: DataTypes.STRING,
4 | label: DataTypes.STRING
5 | })
6 |
7 | return Role
8 | }
9 |
--------------------------------------------------------------------------------
/src/modules/webhooks/payouts/index.ts:
--------------------------------------------------------------------------------
1 | export * from './payoutCreated/payoutCreated'
2 | export * from './payoutUpdated/payoutUpdated'
3 | export * from './payoutFailed/payoutFailed'
4 | export * from './payoutPaid/payoutPaid'
5 |
--------------------------------------------------------------------------------
/src/modules/language/index.js:
--------------------------------------------------------------------------------
1 | const languageSearch = require('./languageSearch')
2 | const projectlanguageSearch = require('./projectProgrammingLanguage')
3 |
4 | module.exports = {
5 | languageSearch,
6 | projectlanguageSearch
7 | }
8 |
--------------------------------------------------------------------------------
/frontend/src/containers/home.js:
--------------------------------------------------------------------------------
1 | import Home from '../components/areas/public/features/welcome/pages/home-page'
2 |
3 | import CommonContainer from './common'
4 |
5 | const HomeContainer = CommonContainer(Home)
6 |
7 | export default HomeContainer
8 |
--------------------------------------------------------------------------------
/frontend/src/main/authOrApp.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 |
3 | import App from './app'
4 |
5 | class AuthOrApp extends Component {
6 | render() {
7 | return
8 | }
9 | }
10 |
11 | export default AuthOrApp
12 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/transitions/transition.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Slide from '@mui/material/Slide'
3 |
4 | const Transition = (props) =>
5 |
6 | export default Transition
7 |
--------------------------------------------------------------------------------
/src/app/routes/contact.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controllers = require('../controllers/contact')
4 |
5 | router.post('/recruiters', controllers.contactRecruiters)
6 |
7 | module.exports = router
8 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/lists/requirements-list/requirement-list.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Root = styled('div')(({ theme }) => ({
4 | width: '100%',
5 | maxWidth: 500
6 | }))
7 |
--------------------------------------------------------------------------------
/frontend/src/containers/public-container.js:
--------------------------------------------------------------------------------
1 | import CommonContainer from './common'
2 | import PublicPage from '../components/areas/public/pages/public-page'
3 |
4 | const PublicContainer = CommonContainer(PublicPage)
5 |
6 | export default PublicContainer
7 |
--------------------------------------------------------------------------------
/src/app/routes/team.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controllers = require('../controllers/team')
4 |
5 | router.post('/core/join', controllers.requestJoinCoreTeamController)
6 |
7 | module.exports = router
8 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/dialogs/issue-invite-dialog/issue-invite-dialog.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Container = styled('div')`
4 | display: inline-block;
5 | margin-right: 1rem;
6 | `
7 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 |
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/public-pages/issue-public-page/issue-public-page.styles.tsx:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | // Root wrapper
4 | export const Root = styled('div')(() => ({
5 | flexGrow: 1,
6 | marginTop: 0
7 | }))
8 |
--------------------------------------------------------------------------------
/frontend/src/containers/welcome.js:
--------------------------------------------------------------------------------
1 | import Welcome from '../components/areas/public/features/welcome/pages/welcome-page'
2 |
3 | import CommonContainer from './common'
4 |
5 | const WelcomeContainer = CommonContainer(Welcome)
6 |
7 | export default WelcomeContainer
8 |
--------------------------------------------------------------------------------
/src/modules/contact/contactRecruiters.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const ContactMail = require('../mail/contact')
3 |
4 | module.exports = Promise.method(function contactRecruiters(contactParams) {
5 | return ContactMail.recruiters(contactParams)
6 | })
7 |
--------------------------------------------------------------------------------
/src/modules/offers/index.js:
--------------------------------------------------------------------------------
1 | const offerExists = require('./offerExists')
2 | const offerMessage = require('./offerMessage')
3 | const updateOffer = require('./updateOffer')
4 |
5 | module.exports = {
6 | offerExists,
7 | offerMessage,
8 | updateOffer
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/buttons/import-issue-button/import-issue-button.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | export const Container = styled('div')(() => ({
3 | // reserved for future styles
4 | }))
5 | export default { Container }
6 |
--------------------------------------------------------------------------------
/src/modules/payouts/index.js:
--------------------------------------------------------------------------------
1 | const payoutBuilds = require('./payoutBuilds')
2 | const payoutRequest = require('./payoutRequest')
3 | const payoutSearch = require('./payoutSearch')
4 |
5 | module.exports = {
6 | payoutBuilds,
7 | payoutRequest,
8 | payoutSearch
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/welcome/pages/home-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Home from 'design-library/pages/public-pages/home-public-page/home-public-page'
3 |
4 | const HomePage = () => {
5 | return
6 | }
7 |
8 | export default HomePage
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/bank-account-forms/bank-account-form/bank-account-form.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Placeholder = styled('div')(() => ({
4 | margin: 10
5 | }))
6 |
7 | export default { Placeholder }
8 |
--------------------------------------------------------------------------------
/frontend/src/utils/valid-account.tsx:
--------------------------------------------------------------------------------
1 | export const validAccount = (user, account) => {
2 | if (!user?.account_id) {
3 | return false
4 | } else if (account?.data?.requirements?.currently_due?.length > 0) {
5 | return false
6 | } else {
7 | return true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/app/routes/dashboard.ts:
--------------------------------------------------------------------------------
1 | import express from 'express'
2 | import { getUserInfo } from '../controllers/user/user'
3 | import secure from './secure'
4 |
5 | const router = express.Router()
6 |
7 | router.use(secure)
8 | router.get('/', getUserInfo)
9 |
10 | export default router
11 |
--------------------------------------------------------------------------------
/frontend/src/actions/helpers/index.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | import Auth from '../../modules/auth'
3 |
4 | export const validToken = () => {
5 | if (Auth.getToken()) {
6 | axios.defaults.headers.common['authorization'] = Auth.getToken()
7 | }
8 |
9 | return true
10 | }
11 |
--------------------------------------------------------------------------------
/playwright/example.spec.js:
--------------------------------------------------------------------------------
1 | const { test, expect } = require('@playwright/test')
2 |
3 | test('basic check', async ({ page }) => {
4 | await page.goto('data:text/html,
Hello Playwright
')
5 | await expect(page.locator('h1')).toHaveText('Hello Playwright')
6 | })
7 |
--------------------------------------------------------------------------------
/src/app/routes/types.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/type')
5 |
6 | router.get('/search', controllers.typeSearchController)
7 |
8 | module.exports = router
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/fields/field/field.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { FormControl as MuiFormControl } from '@mui/material'
3 |
4 | export const RootFormControl = styled(MuiFormControl)(({ theme }) => ({
5 | width: '100%'
6 | }))
7 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/issue-cards/issue-invite-card/issue-invite-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { Card } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const Root = styled(Card)(() => ({
5 | marginBottom: 20,
6 | marginTop: 20
7 | }))
8 |
--------------------------------------------------------------------------------
/src/app/routes/label.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/label')
5 |
6 | router.get('/search', controllers.labelSearchController)
7 |
8 | module.exports = router
9 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: required
2 | dist: trusty
3 | language: node_js
4 | cache:
5 | directories:
6 | - node_modules
7 | services:
8 | - postgresql
9 | before_script:
10 | - psql -c 'create database gitpay_test;' -U postgres
11 | - npm run migrate-test
12 | node_js:
13 | - "8.6.0"
14 |
15 |
--------------------------------------------------------------------------------
/src/db/migrations/20180306212049-users.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'name', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'name')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/.sequelizerc:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | 'config': path.resolve('src', 'config', 'config.json'),
5 | 'migrations-path': path.resolve('src', 'db', 'migrations'),
6 | 'seeders-path': path.resolve('src', 'db', 'seeders'),
7 | 'models-path': path.resolve('src', 'models')
8 | }
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/welcome/pages/welcome-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import About from 'design-library/pages/public-pages/about-public-page/about-public-page'
3 |
4 | const WelcomePage = (props) => {
5 | return
6 | }
7 |
8 | export default WelcomePage
9 |
--------------------------------------------------------------------------------
/src/db/migrations/20190118000202-add-os-to-users.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'os', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'os')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/payment-cards/wallet-payment-card/wallet-payment-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { Button } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const BtnPayment = styled(Button)(() => ({
5 | float: 'right',
6 | marginTop: 10
7 | }))
8 |
--------------------------------------------------------------------------------
/frontend/src/utils/format-currency.tsx:
--------------------------------------------------------------------------------
1 | export const formatCurrency = (
2 | amount: number | bigint,
3 | locale: string = 'en-US',
4 | currency: string = 'USD'
5 | ) => {
6 | return new Intl.NumberFormat(locale, {
7 | style: 'currency',
8 | currency: currency
9 | }).format(amount)
10 | }
11 |
--------------------------------------------------------------------------------
/src/app/routes/info.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../models')
4 | require('../../modules/authenticationHelpers')
5 | const controllers = require('../controllers/info')
6 |
7 | router.get('/all', controllers.info)
8 |
9 | module.exports = router
10 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/pricing/pages/pricing-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PricingPublicPage from 'design-library/pages/public-pages/pricing-public-page/pricing-public-page'
3 |
4 | const PricingPage = () => {
5 | return
6 | }
7 | export default PricingPage
8 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/buttons/button/button.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import CircularProgress from '@mui/material/CircularProgress'
3 |
4 | export const Progress = styled(CircularProgress)(() => ({
5 | marginLeft: 10
6 | }))
7 |
8 | export default { Progress }
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/payout-forms/payout-request-form/payout-request-form.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | // Wrapper for the currency end-adornment
4 | export const EndAdornment = styled('div')(({ theme }) => ({
5 | marginLeft: theme.spacing(1)
6 | }))
7 |
--------------------------------------------------------------------------------
/src/db/migrations/20180314205257-add-repos-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'repos', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'repos')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180626131108-add-title-to-task.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Tasks', 'title', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Tasks', 'title')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180703190806-add-token-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Orders', 'token', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Orders', 'token')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20190118000224-add-skills-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'skills', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'skills')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180314193229-add-website-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'website', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'website')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180930181704-add-country-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'country', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'country')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20210122093719-add-prviate-to-task.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Tasks', 'private', Sequelize.BOOLEAN)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Tasks', 'private')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Gitpay Discussions
4 | url: https://github.com/worknenjoy/gitpay/discussions
5 | about: Please ask and answer questions here.
6 | - name: Gipay website
7 | url: https://gitpay.me
8 | about: See the platform in production
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/templates/base/public-base/public-base.styles.ts:
--------------------------------------------------------------------------------
1 | import { Container } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const RootContainer = styled(Container)(({ theme }) => ({
5 | marginBottom: theme.spacing(6),
6 | marginTop: theme.spacing(6)
7 | }))
8 |
--------------------------------------------------------------------------------
/src/db/migrations/20180314204119-add-username-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'username', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'username')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180318174217-add-provider-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'provider', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'provider')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180524213355-add-account-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'account_id', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'account_id')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180701191416-add-provider-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Orders', 'provider', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Orders', 'provider')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180703154147-add-payer-id-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Orders', 'payer_id', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Orders', 'payer_id')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180707141413-add-paypal-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'paypal_id', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'paypal_id')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180930180435-add-language-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'language', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'language')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20190116200530-add-mailflag-to-task.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Tasks', 'notified', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Tasks', 'notified')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20190118000217-add-languages-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'languages', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'languages')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20190328210733-add-status-to-assigns.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Assigns', 'status', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Assigns', 'status')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20200422012929-add-message-to-assign.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Assigns', 'message', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Assigns', 'message')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180314210833-add-picture-url-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'picture_url', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'picture_url')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180511130542-add-customer-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'customer_id', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'customer_id')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180610112853-add-transfer-to-task.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Tasks', 'transfer_id', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Tasks', 'transfer_id')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180626132835-add-repourl-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'profile_url', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'profile_url')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20180707140456-add-transfer-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Orders', 'transfer_id', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Orders', 'transfer_id')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20210202164305-add-description-to-task.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Tasks', 'description', Sequelize.TEXT)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Tasks', 'description')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/models/planSchema.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const PlanSchema = sequelize.define('PlanSchema', {
3 | name: DataTypes.STRING,
4 | description: DataTypes.STRING,
5 | fee: DataTypes.DECIMAL,
6 | feeType: DataTypes.ENUM('charge', 'refund')
7 | })
8 |
9 | return PlanSchema
10 | }
11 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/alerts/account-requirements/account-requirements.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { CustomAlert as Alert } from '../alert/alert'
3 |
4 | export const CustomAlert = styled(Alert)({
5 | marginBottom: 20,
6 | display: 'flex',
7 | alignItems: 'center'
8 | })
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/price-forms/price-plan-form/price-plan-form.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Grid } from '@mui/material'
3 |
4 | // Styled container for the price plan form
5 | export const PlanGrid = styled(Grid)(({ theme }) => ({
6 | alignItems: 'center'
7 | }))
8 |
--------------------------------------------------------------------------------
/src/db/migrations/20180703154101-add-payment-url-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Orders', 'payment_url', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Orders', 'payment_url')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20190424115813-add-open-for-jobs-to-users.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'openForJobs', Sequelize.BOOLEAN)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'openForJobs')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/modules/wallets/index.js:
--------------------------------------------------------------------------------
1 | const walletBuilds = require('./walletBuilds')
2 | const walletUpdate = require('./walletUpdate')
3 | const walletList = require('./walletList')
4 | const walletFetch = require('./walletFetch')
5 |
6 | module.exports = {
7 | walletBuilds,
8 | walletUpdate,
9 | walletList,
10 | walletFetch
11 | }
12 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/private/features/account/features/account-details/account-details.css:
--------------------------------------------------------------------------------
1 | .PhoneInputInput {
2 | height: 52px;
3 | border: 2px solid #E2E5EA;
4 | border-radius: 3px;
5 | padding: 0px 12px;
6 | height: 52;
7 | }
8 |
9 | .PhoneInput.PhoneInput--focus input {
10 | border: 2px solid #353A42 !important;
11 | }
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/team/pages/team.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import TeamPage from '../../../../../design-library/pages/public-pages/team-public-page/team-public-page'
3 |
4 | const Team = ({ joinTeamAPICall }) => {
5 | return
6 | }
7 |
8 | export default Team
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/headers/profile-secondary-header/profile-secondary-header.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Container = styled('div')(({ theme }) => ({
4 | marginBottom: 20,
5 | display: 'flex',
6 | flexDirection: 'row',
7 | justifyContent: 'space-between'
8 | }))
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/public-pages/user-profile-public-page/user-profile-public-page.styles.ts:
--------------------------------------------------------------------------------
1 | import { Grid } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const Root = styled(Grid)(({ theme }) => ({
5 | marginRight: theme.spacing(3),
6 | marginBottom: theme.spacing(3)
7 | }))
8 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/filters/issue-filter/issue-filter.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { MenuItem } from '@mui/material'
3 |
4 | export const MenuItemCustom = styled(MenuItem)(({ theme }) => ({
5 | display: 'flex',
6 | alignItems: 'center',
7 | justifyContent: 'space-between'
8 | }))
9 |
--------------------------------------------------------------------------------
/src/db/migrations/20200707091140-add-transfer_group-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Orders', 'transfer_group', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Orders', 'transfer_group')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20200822085416-addProviderUsernameToUser.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'provider_username', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'provider_username')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/modules/paymentRequests/index.js:
--------------------------------------------------------------------------------
1 | const paymentRequestBuilds = require('./paymentRequestBuilds')
2 | const paymentRequestList = require('./paymentRequestList')
3 | const paymentRequestUpdate = require('./paymentRequestUpdate')
4 |
5 | module.exports = {
6 | paymentRequestBuilds,
7 | paymentRequestList,
8 | paymentRequestUpdate
9 | }
10 |
--------------------------------------------------------------------------------
/src/app/routes/paymentRequestBalance.ts:
--------------------------------------------------------------------------------
1 | import express from 'express'
2 | import secure from './secure'
3 |
4 | const router = express.Router()
5 |
6 | import { listPaymentRequestBalances } from '../controllers/payment-request-balance'
7 |
8 | router.use(secure)
9 | router.get('/', listPaymentRequestBalances)
10 |
11 | export default router
12 |
--------------------------------------------------------------------------------
/src/app/routes/paymentRequestPayment.ts:
--------------------------------------------------------------------------------
1 | import express from 'express'
2 | import secure from './secure'
3 |
4 | const router = express.Router()
5 |
6 | import { listPaymentRequestPayments } from '../controllers/payment-request-payment'
7 |
8 | router.use(secure)
9 | router.get('/', listPaymentRequestPayments)
10 |
11 | export default router
12 |
--------------------------------------------------------------------------------
/src/app/routes/projects.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/project')
5 |
6 | router.get('/fetch/:id', controllers.fetchProject)
7 | router.get('/list', controllers.listProjects)
8 |
9 | module.exports = router
10 |
--------------------------------------------------------------------------------
/src/db/migrations/20191015182526-add-authorization-id-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Orders', 'authorization_id', Sequelize.STRING)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Orders', 'authorization_id')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/modules/mail/handleResponse.js:
--------------------------------------------------------------------------------
1 | module.exports = (response) => {
2 | // eslint-disable-next-line no-console
3 | console.log(response[0].statusCode)
4 | // eslint-disable-next-line no-console
5 | console.log(response[0].body)
6 | // eslint-disable-next-line no-console
7 | console.log(response[0].headers)
8 | return response
9 | }
10 |
--------------------------------------------------------------------------------
/test/data/stripe/stripe.customer.js:
--------------------------------------------------------------------------------
1 | module.exports.customer = {
2 | id: 'cus_QsYn1aSStYv4tf',
3 | object: 'customer',
4 | address: null,
5 | balance: 0,
6 | created: 1615375261,
7 | currency: 'usd',
8 | default_source: null,
9 | delinquent: false,
10 | description: null,
11 | discount: null,
12 | email: 'test@test.com'
13 | }
14 |
--------------------------------------------------------------------------------
/src/modules/paymentRequestsTransfers/paymentRequestsTransfersBuilds.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(async function transferBuilds(params) {
5 | const paymentRequestTransfer = await models.PaymentRequestTransfer.create(params)
6 | return paymentRequestTransfer
7 | })
8 |
--------------------------------------------------------------------------------
/src/modules/shared/stripe/stripe.js:
--------------------------------------------------------------------------------
1 | module.exports = () => {
2 | const Stripe = require('stripe')
3 | const passthroughFetch = (...args) => fetch(...args)
4 |
5 | return new Stripe(process.env.STRIPE_KEY, {
6 | httpClient:
7 | process.env.NODE_ENV === 'test' ? Stripe.createFetchHttpClient(passthroughFetch) : undefined
8 | })
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/drawers/issue-offer-drawer/issue-offer-drawer.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | // Styled wrapper for inline text used inside FormattedMessage render props
4 | export const SpanText = styled('span')(({ theme }) => ({
5 | display: 'inline-block',
6 | verticalAlign: 'middle'
7 | }))
8 |
--------------------------------------------------------------------------------
/src/app/routes/offer.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 |
5 | const controllers = require('../controllers/offer')
6 | const secure = require('./secure')
7 |
8 | router.use(secure)
9 | router.put('/:id', controllers.updateOffer)
10 |
11 | module.exports = router
12 |
--------------------------------------------------------------------------------
/src/db/migrations/20190118000232-add-receive-notifications-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Users', 'receiveNotifications', Sequelize.BOOLEAN)
4 | },
5 |
6 | down: (queryInterface, Sequelize) => {
7 | queryInterface.removeColumn('Users', 'receiveNotifications')
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/modules/offers/updateOffer.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 |
3 | const models = require('../../models')
4 | const AssignMail = require('../mail/assign')
5 | const i18n = require('i18n')
6 |
7 | module.exports = Promise.method(function ({ id }, { status }) {
8 | return models.Offer.update({ status }, { where: { id } }).then((u) => u)
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/loaders/placeholders/avatar-placeholder.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Skeleton } from '@mui/material'
3 |
4 | export const Placeholder = styled(Skeleton)(() => ({
5 | width: 40,
6 | height: 40,
7 | margin: 10
8 | }))
9 |
10 | export default {
11 | Placeholder
12 | }
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/claims-dashboard-card/claims-dashboard-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const DashboardCardChipList = styled('div')({
4 | display: 'flex',
5 | justifyContent: 'flex-start',
6 | flexWrap: 'wrap',
7 | gap: '8px',
8 | paddingTop: '16px'
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/payments-dashboard-card/payments-dashboard-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const DashboardCardChipList = styled('div')({
4 | display: 'flex',
5 | justifyContent: 'flex-start',
6 | flexWrap: 'wrap',
7 | gap: '8px',
8 | paddingTop: '16px'
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/payouts-dashboard-card/payouts-dashboard-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const DashboardCardChipList = styled('div')({
4 | display: 'flex',
5 | justifyContent: 'flex-start',
6 | flexWrap: 'wrap',
7 | gap: '8px',
8 | paddingTop: '16px'
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/wallets-dashboard-card/wallets-dashboard-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const DashboardCardChipList = styled('div')({
4 | display: 'flex',
5 | justifyContent: 'flex-start',
6 | flexWrap: 'wrap',
7 | gap: '8px',
8 | paddingTop: '16px'
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/public-pages/explorer-public-page/explorer-public-page/explorer-public-page.styles.ts:
--------------------------------------------------------------------------------
1 | import { Container } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const RootContainer = styled(Container)(({ theme }) => ({
5 | marginBottom: theme.spacing(6),
6 | marginTop: theme.spacing(6)
7 | }))
8 |
--------------------------------------------------------------------------------
/src/app/routes/coupon.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/coupon')
5 | const secure = require('./secure')
6 |
7 | router.use(secure)
8 |
9 | router.post('/validate', controllers.validateCoupon)
10 |
11 | module.exports = router
12 |
--------------------------------------------------------------------------------
/src/modules/language/projectProgrammingLanguage.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 | const { Op } = require('sequelize')
4 |
5 | module.exports = Promise.method(function projectLanguageSearch(searchParams) {
6 | return models.ProjectProgrammingLanguage.findAll({}).then((data) => {
7 | return data
8 | })
9 | })
10 |
--------------------------------------------------------------------------------
/src/modules/transfers/index.js:
--------------------------------------------------------------------------------
1 | const transferBuilds = require('./transferBuilds')
2 | const transferSearch = require('./transferSearch')
3 | const transferUpdate = require('./transferUpdate')
4 | const transferFetch = require('./transferFetch')
5 |
6 | module.exports = {
7 | transferBuilds,
8 | transferSearch,
9 | transferUpdate,
10 | transferFetch
11 | }
12 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/session/pages/signin-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import SigninPageTemplate from 'design-library/pages/public-pages/session-public-pages/signin-page/signin-page'
3 |
4 | const SigninPage = ({ addNotification }) => {
5 | return
6 | }
7 |
8 | export default SigninPage
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/base/action-field/action-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ActionsMenu from 'design-library/molecules/menus/actions-menu/actions-menu'
3 |
4 | const ActionField = ({ actions }) => {
5 | return
6 | }
7 |
8 | export default ActionField
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/issue/issue-status-field/issue-status-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import IssueStatus from 'design-library/atoms/status/issue-status/issue-status'
3 |
4 | const IssueStatusField = ({ issue }) =>
5 |
6 | export default IssueStatusField
7 |
--------------------------------------------------------------------------------
/frontend/tests/components/__mocks__/react-intl.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | const Intl = jest.requireActual('react-intl')
3 |
4 | const intl = {
5 | formatMessage: ({ defaultMessage }) => defaultMessage,
6 | defineMessages: (messages) => messages
7 | }
8 |
9 | Intl.injectIntl = (Node) => (props) =>
10 |
11 | module.exports = Intl
12 |
--------------------------------------------------------------------------------
/src/models/type.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const Type = sequelize.define('Type', {
3 | name: DataTypes.STRING,
4 | label: DataTypes.STRING,
5 | description: DataTypes.STRING
6 | })
7 |
8 | Type.associate = (models) => {
9 | Type.belongsToMany(models.User, { through: 'User_Types' })
10 | }
11 |
12 | return Type
13 | }
14 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/alerts/alert/alert.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Alert } from '@mui/material'
3 |
4 | export const CustomAlertStyled = styled(Alert)(({ theme }) => ({
5 | [theme.breakpoints.down('sm')]: {
6 | display: 'flex',
7 | flexDirection: 'column',
8 | alignItems: 'center'
9 | }
10 | }))
11 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/bank-account-dashboard-card/bank-account-dashboard-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const DashboardCardChipList = styled('div')({
4 | display: 'flex',
5 | justifyContent: 'flex-start',
6 | flexWrap: 'wrap',
7 | gap: '8px',
8 | paddingTop: '16px'
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/my-issues-dashboard-card/my-issue-dashboard-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const IssueDashboardCardChipList = styled('div')({
4 | display: 'flex',
5 | justifyContent: 'flex-start',
6 | flexWrap: 'wrap',
7 | gap: '8px',
8 | paddingTop: '16px'
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/private-pages/settings-pages/account-settings/account-settings.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import AccountTabs from '../../../../molecules/tabs/account-tabs/account-tabs'
3 |
4 | const AccountSettings = ({ user, children }) => {
5 | return {children}
6 | }
7 |
8 | export default AccountSettings
9 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/session/pages/forgot-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ForgotPasswordPage from 'design-library/pages/public-pages/session-public-pages/forgot-password-page/forgot-password-page'
3 |
4 | const ForgotPage = ({ forgotPassword }) => {
5 | return
6 | }
7 | export default ForgotPage
8 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/loaders/loader/loader.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styles from './loader.styles'
3 |
4 | function CustomizedProgress() {
5 | const { Root, Progress } = styles as any
6 |
7 | return (
8 |
9 |
10 |
11 | )
12 | }
13 |
14 | export default CustomizedProgress
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/payment-requests-dashboard-card/payment-requests-dashboard-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const DashboardCardChipList = styled('div')({
4 | display: 'flex',
5 | justifyContent: 'flex-start',
6 | flexWrap: 'wrap',
7 | gap: '8px',
8 | paddingTop: '16px'
9 | })
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/menus/account-menu/account-menu.styles.ts:
--------------------------------------------------------------------------------
1 | import { Avatar } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 | import media from '../../../../../styleguide/media'
4 |
5 | export const StyledAvatar = styled(Avatar)`
6 | margin-left: 20px;
7 | cursor: pointer;
8 |
9 | ${media.phone`margin-left: 15px;`}
10 | `
11 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/private-pages/settings-pages/payout-settings/payout-settings.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PayoutSetingsTabs from '../../../../molecules/tabs/payout-settings-tabs/payout-settings-tabs'
3 |
4 | const PayoutSetings = ({ children }) => {
5 | return {children}
6 | }
7 |
8 | export default PayoutSetings
9 |
--------------------------------------------------------------------------------
/src/app/routes/language.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/language')
5 |
6 | router.get('/search', controllers.languageSearchController)
7 | router.get('/task/search', controllers.projectLanguageSearchController)
8 |
9 | module.exports = router
10 |
--------------------------------------------------------------------------------
/src/modules/users/userFetch.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 | const stripe = require('../shared/stripe/stripe')()
4 |
5 | module.exports = Promise.method(function userFetch(id) {
6 | return models.User.findOne({
7 | where: { id },
8 | include: [models.Type]
9 | }).then((data) => {
10 | return data
11 | })
12 | })
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/input-comment/input-comment.styles.ts:
--------------------------------------------------------------------------------
1 | import { Theme } from '@mui/material/styles'
2 |
3 | export const getInputCommentStyles = (theme: Theme) => ({
4 | counter: {
5 | fontFamily: 'Roboto',
6 | color: '#a9a9a9',
7 | marginTop: '10px',
8 | textAlign: 'right'
9 | }
10 | })
11 |
12 | export default getInputCommentStyles
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-pagination-actions/section-table-pagination-actions.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Root = styled('div')(({ theme }) => ({
4 | flexShrink: 0,
5 | color: theme.palette.text.secondary,
6 | marginLeft: theme.spacing(2.5)
7 | }))
8 |
9 | export default { Root }
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/loaders/placeholders/avatar-placeholder.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styles from './avatar-placeholder.styles'
3 |
4 | export const AvatarPlaceholder = () => {
5 | const { Placeholder } = styles as any
6 | return (
7 |
10 | )
11 | }
12 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/payouts/payout-status-field/payout-status-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PayoutStatus from 'design-library/atoms/status/payout-status/payout-status'
3 |
4 | const PayoutStatusField = ({ status }) => {
5 | return
6 | }
7 |
8 | export default PayoutStatusField
9 |
--------------------------------------------------------------------------------
/src/modules/label/labelSearch.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 | const { Op } = require('sequelize')
4 |
5 | module.exports = Promise.method(function labelSearch(searchParams) {
6 | return models.Label.findAll({
7 | where: searchParams || {},
8 | order: [['name', 'ASC']]
9 | }).then((data) => {
10 | return data
11 | })
12 | })
13 |
--------------------------------------------------------------------------------
/src/modules/walletOrders/index.js:
--------------------------------------------------------------------------------
1 | const walletOrderBuilds = require('./walletOrderBuilds')
2 | const walletOrderUpdate = require('./walletOrderUpdate')
3 | const walletOrderList = require('./walletOrderList')
4 | const walletOrderFetch = require('./walletOrderFetch')
5 |
6 | module.exports = {
7 | walletOrderBuilds,
8 | walletOrderUpdate,
9 | walletOrderList,
10 | walletOrderFetch
11 | }
12 |
--------------------------------------------------------------------------------
/test/authenticate.sequelize.test.js:
--------------------------------------------------------------------------------
1 | const models = require('../src/models')
2 |
3 | describe('authenticate', () => {
4 | it('should authenticate sequelize', (done) => {
5 | models.sequelize
6 | .authenticate()
7 | .then((err) => {
8 | if (err) done(err)
9 | else done()
10 | })
11 | .catch((err) => {
12 | done(err)
13 | })
14 | })
15 | })
16 |
--------------------------------------------------------------------------------
/src/modules/users/userAccountBalance.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const stripe = require('../shared/stripe/stripe')()
3 |
4 | module.exports = Promise.method(async function userAccountBalance(userParameters) {
5 | const { account_id } = userParameters
6 | const accountBalance = await stripe.balance.retrieve({
7 | stripeAccount: account_id
8 | })
9 | return accountBalance
10 | })
11 |
--------------------------------------------------------------------------------
/src/modules/organizations/index.js:
--------------------------------------------------------------------------------
1 | const organizationList = require('./organizationList')
2 | const organizationBuilds = require('./organizationBuilds')
3 | const organizationUpdate = require('./organizationUpdate')
4 | const organizationFetch = require('./organizationFetch')
5 |
6 | module.exports = {
7 | organizationList,
8 | organizationBuilds,
9 | organizationUpdate,
10 | organizationFetch
11 | }
12 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/transfer/transfer-status-field/transfer-status-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import TransferStatus from 'design-library/atoms/status/transfer-status/transfer-status'
3 |
4 | const TransferStatusField = ({ status }) => {
5 | return
6 | }
7 |
8 | export default TransferStatusField
9 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/session/pages/account-activation-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import AccountActivation from 'design-library/pages/public-pages/session-public-pages/account-activation/account-activation'
3 |
4 | const AccountActivationPage = ({ activateAccount }) => {
5 | return
6 | }
7 |
8 | export default AccountActivationPage
9 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/session/pages/signup-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import SignupPageTemplate from 'design-library/pages/public-pages/session-public-pages/signup-page/signup-page'
3 |
4 | const SignupPage = ({ fetchRoles, registerUser, roles }) => {
5 | return
6 | }
7 |
8 | export default SignupPage
9 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/loaders/loader/loader.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Loader from './loader'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Loaders/Loader',
6 | component: Loader
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here if any
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/content/empty/empty-claim/empty-claim.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import EmptyClaim from './empty-claim'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Empty/EmptyClaim',
6 | component: EmptyClaim
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {}
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/base/text-field/text-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Typography } from '@mui/material'
3 |
4 | const TextField = ({ title }) => {
5 | return (
6 |
7 | {title}
8 |
9 | )
10 | }
11 |
12 | export default TextField
13 |
--------------------------------------------------------------------------------
/src/db/migrations/20220404015828-add-active-to-user.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: function (queryInterface, Sequelize) {
3 | return queryInterface.addColumn('Users', 'active', {
4 | type: Sequelize.BOOLEAN,
5 | allowNull: false,
6 | defaultValue: true
7 | })
8 | },
9 |
10 | down: function (queryInterface, Sequelize) {
11 | queryInterface.removeColumn('Users', 'active')
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/modules/language/languageSearch.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 | const { Op } = require('sequelize')
4 |
5 | module.exports = Promise.method(function languageSearch(searchParams) {
6 | return models.ProgrammingLanguage.findAll({
7 | where: searchParams || {},
8 | order: [['name', 'ASC']]
9 | }).then((data) => {
10 | return data
11 | })
12 | })
13 |
--------------------------------------------------------------------------------
/src/modules/payouts/payoutSearch.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(async function payoutSearch(params = {}) {
5 | let payouts = []
6 | if (params.userId) {
7 | payouts = await models.Payout.findAll({
8 | where: { userId: params.userId },
9 | include: [models.User]
10 | })
11 | }
12 | return payouts
13 | })
14 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/content/empty/empty-payout/empty-payout.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import EmptyPayout from './empty-payout'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Empty/EmptyPayout',
6 | component: EmptyPayout
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {}
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/lists/issue-author-list/issue-author-list.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Root = styled('div')(({ theme }) => ({
4 | flexGrow: 1
5 | }))
6 |
7 | export const MainBlock = styled('div')(({ theme }) => ({
8 | display: 'flex',
9 | justifyContent: 'center',
10 | alignItems: 'center',
11 | padding: theme.spacing(2)
12 | }))
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/issue/issue-created-field/issue-created-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import CreatedField from '../../base/created-field/created-field'
3 |
4 | const IssueCreatedField = ({ issue }) => {
5 | const { createdAt } = issue
6 | return
7 | }
8 |
9 | export default IssueCreatedField
10 |
--------------------------------------------------------------------------------
/src/app/controllers/coupon.js:
--------------------------------------------------------------------------------
1 | const couponValidate = require('../../modules/coupon').validateCoupon
2 |
3 | exports.validateCoupon = (req, res) => {
4 | couponValidate(req.body)
5 | .then((data) => {
6 | res.send(data)
7 | })
8 | .catch((error) => {
9 | // eslint-disable-next-line no-console
10 | console.log(error)
11 | res.status(400).send({ error: error.message })
12 | })
13 | }
14 |
--------------------------------------------------------------------------------
/src/app/controllers/type.js:
--------------------------------------------------------------------------------
1 | const typeSearch = require('../../modules/types').typeSearch
2 |
3 | exports.typeSearchController = (req, res) => {
4 | typeSearch(req.body)
5 | .then((data) => {
6 | res.status(200).send(data)
7 | })
8 | .catch((error) => {
9 | // eslint-disable-next-line no-console
10 | console.log('error on types', error)
11 | res.status(401).send(error)
12 | })
13 | }
14 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/project-card/project-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { Card, Grid } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const RootCard = styled(Card)(({ theme }) => ({
5 | display: 'flex',
6 | flexDirection: 'column'
7 | }))
8 |
9 | export const StatsItem = styled(Grid)(({ theme }) => ({
10 | alignItems: 'center',
11 | display: 'flex'
12 | }))
13 |
--------------------------------------------------------------------------------
/src/app/controllers/offer.js:
--------------------------------------------------------------------------------
1 | const Offers = require('../../modules/offers')
2 |
3 | // update offer
4 | exports.updateOffer = ({ params, body }, res) =>
5 | Offers.updateOffer(params, body)
6 | .then((data) => res.send(data))
7 | .catch((error) => {
8 | // eslint-disable-next-line no-console
9 | console.log('error on task controller update offer', error)
10 | res.send({ error: error.message })
11 | })
12 |
--------------------------------------------------------------------------------
/src/app/controllers/user/user.ts:
--------------------------------------------------------------------------------
1 | import userInfo from '../../../modules/users/userInfo'
2 |
3 | export const getUserInfo = async (req: any, res: any) => {
4 | const userId = req.user.id
5 | try {
6 | const info = await userInfo({ userId })
7 | res.status(200).json(info)
8 | } catch (error) {
9 | console.error('Error fetching user info:', error)
10 | res.status(500).send('Error fetching user info')
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/modules/types/typeSearch.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(function typeSearch(typeParameters) {
5 | return models.Type.findAll({})
6 | .then((type) => {
7 | return type
8 | })
9 | .catch((error) => {
10 | // eslint-disable-next-line no-console
11 | console.log(error)
12 | return false
13 | })
14 | })
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/organization-card/organization-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { Card, Grid } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const RootCard = styled(Card)(({ theme }) => ({
5 | display: 'flex',
6 | flexDirection: 'column'
7 | }))
8 |
9 | export const StatsItem = styled(Grid)(({ theme }) => ({
10 | alignItems: 'center',
11 | display: 'flex'
12 | }))
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/drawers/drawer/drawer-actions/drawer-actions.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Root = styled('div')(({ theme }) => ({
4 | display: 'flex',
5 | justifyContent: 'flex-end',
6 | padding: theme.spacing(2),
7 | marginLeft: theme.spacing(1),
8 | '& button': {
9 | marginLeft: theme.spacing(2)
10 | }
11 | }))
12 |
13 | export default { Root }
14 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/drawers/offer-drawer/components/offer-drawer-create.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Details = styled('div')(() => ({
4 | display: 'flex',
5 | flexDirection: 'column'
6 | }))
7 |
8 | export const SpanText = styled('span')(() => ({
9 | display: 'inline-block',
10 | verticalAlign: 'middle'
11 | }))
12 |
13 | export default { Details, SpanText }
14 |
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | files:
2 | - source: /locales/en.json
3 | translation: /locales/result/%two_letters_code%.json
4 | languages_mapping:
5 | two_letters_code:
6 | pt-BR: br
7 | en-US: en
8 | - source: /frontend/src/translations/generated/en.json
9 | translation: /frontend/src/translations/result/%two_letters_code%.json
10 | languages_mapping:
11 | two_letters_code:
12 | pt-BR: br
13 | en-US: en
14 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/lists/issue-payments-list/issue-payments-list.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import List from '@mui/material/List'
3 | import Avatar from '@mui/material/Avatar'
4 |
5 | export const Root = styled(List)(({ theme }) => ({ width: '100%' }))
6 | export const SmallAvatar = styled(Avatar)(({ theme }) => ({
7 | width: theme.spacing(3),
8 | height: theme.spacing(3)
9 | }))
10 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/menus/topbar-menu/topbar-menu.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import TopbarMenu from './topbar-menu'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Menus/TopbarMenu',
6 | component: TopbarMenu
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/signup-forms/signup-signin/signup-signin.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import SignupSignin from './signup-signin'
3 |
4 | export default {
5 | title: 'Design Library/Organisms/Forms/SignupForms/SignupSignin',
6 | component: SignupSignin
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {}
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/breadcrumbs/breadcrumb/breadcrumb.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const BreadcrumbRoot = styled('div')(({ theme }) => ({
4 | marginTop: theme.spacing(2),
5 | marginBottom: theme.spacing(2)
6 | }))
7 |
8 | export const BreadcrumbLink = styled('span')(() => ({
9 | textDecoration: 'underline'
10 | }))
11 |
12 | export default { BreadcrumbRoot, BreadcrumbLink }
13 |
--------------------------------------------------------------------------------
/src/app/controllers/contact.js:
--------------------------------------------------------------------------------
1 | const contactRecruiters = require('../../modules/contact').contactRecruiters
2 |
3 | exports.contactRecruiters = (req, res) => {
4 | contactRecruiters(req.body)
5 | .then((data) => {
6 | res.status(200).send(data)
7 | })
8 | .catch((error) => {
9 | // eslint-disable-next-line no-console
10 | console.log('error on contactRecruiters', error)
11 | res.status(401).send(error)
12 | })
13 | }
14 |
--------------------------------------------------------------------------------
/src/modules/mail/handleError.js:
--------------------------------------------------------------------------------
1 | module.exports = (error) => {
2 | // error is an instance of SendGridError
3 | // The full response is attached to error.response
4 | // eslint-disable-next-line no-console
5 | console.log('error to send email:')
6 | // eslint-disable-next-line no-console
7 | console.log(error.response.body.errors)
8 | // eslint-disable-next-line no-console
9 | console.log(error.response.statusCode)
10 | return error
11 | }
12 |
--------------------------------------------------------------------------------
/test/data/github/github.issue.error.js:
--------------------------------------------------------------------------------
1 | module.exports.limitException = {
2 | message:
3 | "API rate limit exceeded for 87.52.110.50. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) If you reach out to GitHub Support for help, please include the request ID FF0B:15FEB:9CD277E:9D9D116:66193B8E.",
4 | documentation_url: 'https://docs.github.com/rest/overview/rate-limits-for-the-rest-api'
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/content/empty/empty-bank-account/empty-bank-account.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import EmptyBankAccount from './empty-bank-account'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Empty/EmptyBankAccount',
6 | component: EmptyBankAccount
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {}
13 |
--------------------------------------------------------------------------------
/src/app/routes/payout.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const secure = require('./secure')
4 | require('../../modules/authenticationHelpers')
5 | const controllers = require('../controllers/payout')
6 |
7 | router.use(secure)
8 | router.post('/create', controllers.createPayout)
9 | router.post('/request', controllers.requestPayout)
10 | router.get('/search', controllers.searchPayout)
11 |
12 | module.exports = router
13 |
--------------------------------------------------------------------------------
/src/app/routes/transfer.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/transfer')
5 |
6 | router.post('/create', controllers.createTransfer)
7 | router.get('/search', controllers.searchTransfer)
8 | router.put('/update', controllers.updateTransfer)
9 | router.get('/fetch/:id', controllers.fetchTransfer)
10 |
11 | module.exports = router
12 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/headers/profile-main-header/profile-main-header.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const ProfileHeaderContainer = styled('div')(({ theme }) => ({
4 | marginBottom: 20,
5 | display: 'flex',
6 | flexDirection: 'row',
7 | justifyContent: 'space-between',
8 | [theme.breakpoints.down('sm')]: {
9 | flexDirection: 'column',
10 | alignItems: 'flex-start'
11 | }
12 | }))
13 |
--------------------------------------------------------------------------------
/src/db/migrations/20180606135249-add-assigned-to-task.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Tasks', 'assigned', {
4 | type: Sequelize.INTEGER,
5 | references: {
6 | model: 'Assigns',
7 | key: 'id'
8 | },
9 | allowNull: true
10 | })
11 | },
12 |
13 | down: (queryInterface, Sequelize) => {
14 | queryInterface.removeColumn('Tasks', 'assigned')
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/db/migrations/20210405203758-change-order-source-not-unique.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | return queryInterface.changeColumn('Orders', 'source', {
4 | type: Sequelize.STRING,
5 | unique: false
6 | })
7 | },
8 |
9 | down: (queryInterface, Sequelize) => {
10 | return queryInterface.changeColumn('Orders', 'source', {
11 | type: Sequelize.STRING,
12 | unique: true
13 | })
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/checkbox-terms/checkbox-terms.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import Checkbox from '@mui/material/Checkbox'
3 | import FormControlLabel from '@mui/material/FormControlLabel'
4 |
5 | export const StyledCheckbox = styled(Checkbox)(({ theme }) => ({
6 | paddingRight: 5
7 | }))
8 |
9 | export const StyledFormControlLabel = styled(FormControlLabel)(({ theme }) => ({
10 | paddingTop: 0
11 | }))
12 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/issue/issue-price-field/issue-price-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { useIntl } from 'react-intl'
3 | import AmountField from '../../base/amount-field/amount-field'
4 |
5 | const IssuePriceField = ({ issue }) => {
6 | const intl = useIntl()
7 | const { value } = issue
8 | return
9 | }
10 |
11 | export default IssuePriceField
12 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/public-pages/four-o-four-public-page/four-o-four.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import FourOFour from './four-o-four-public-page'
3 |
4 | export default {
5 | title: 'Design Library/Pages/Public/FourOFour',
6 | component: FourOFour
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here if any
14 | }
15 |
--------------------------------------------------------------------------------
/src/app/controllers/team.js:
--------------------------------------------------------------------------------
1 | const requestJoinCoreTeam = require('../../modules/team').requestJoinCoreTeam
2 |
3 | exports.requestJoinCoreTeamController = (req, res) => {
4 | requestJoinCoreTeam(req.body)
5 | .then((data) => {
6 | res.status(200).send(data)
7 | })
8 | .catch((error) => {
9 | // eslint-disable-next-line no-console
10 | console.log('error on requestJoinCoreTeam', error)
11 | res.status(401).send(error)
12 | })
13 | }
14 |
--------------------------------------------------------------------------------
/src/db/migrations/20201217203513-add-projectId-to-task.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Tasks', 'ProjectId', {
4 | type: Sequelize.INTEGER,
5 | references: {
6 | model: 'Projects',
7 | key: 'id'
8 | },
9 | allowNull: true
10 | })
11 | },
12 |
13 | down: (queryInterface, Sequelize) => {
14 | queryInterface.removeColumn('Tasks', 'ProjectId')
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/form-section/login-form/login-form-signin/login-form-signin.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import LoginFormSignin from './login-form-signin'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/FormSection/LoginForm/LoginFormSignin',
6 | component: LoginFormSignin
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Signin = Template.bind({})
12 | Signin.args = {}
13 |
--------------------------------------------------------------------------------
/frontend/src/containers/account-activation.ts:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux'
2 | import { activateUser } from '../actions/userActions'
3 | import AccountActivation from '../components/areas/public/features/session/pages/account-activation-page'
4 |
5 | const mapDispatchToProps = (dispatch) => ({
6 | activateAccount: (token: string, userId: number) => dispatch(activateUser(userId, token))
7 | })
8 |
9 | export default connect(null, mapDispatchToProps)(AccountActivation)
10 |
--------------------------------------------------------------------------------
/src/app/controllers/label.js:
--------------------------------------------------------------------------------
1 | const labelSearch = require('../../modules/label').labelSearch
2 |
3 | exports.labelSearchController = (req, res) => {
4 | // Use query parameters for GET requests
5 | labelSearch(req.query)
6 | .then((data) => {
7 | res.status(200).send(data)
8 | })
9 | .catch((error) => {
10 | // eslint-disable-next-line no-console
11 | console.log('error on types', error)
12 | res.status(401).send(error)
13 | })
14 | }
15 |
--------------------------------------------------------------------------------
/src/db/migrations/20210605214301-add-coupon-to-order.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | return queryInterface.addColumn('Orders', 'couponId', {
4 | type: Sequelize.INTEGER,
5 | references: {
6 | model: 'Coupons',
7 | key: 'id'
8 | },
9 | allowNull: true
10 | })
11 | },
12 |
13 | down: (queryInterface, Sequelize) => {
14 | queryInterface.removeColumn('Orders', 'couponId')
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/db/migrations/20220412120201-change-offer-comment-char-limit.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | return queryInterface.changeColumn('Offers', 'comment', {
4 | type: Sequelize.STRING(1000),
5 | unique: false
6 | })
7 | },
8 |
9 | down: (queryInterface, Sequelize) => {
10 | return queryInterface.changeColumn('Offers', 'comment', {
11 | type: Sequelize.STRING,
12 | unique: true
13 | })
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/checkbox-terms/checkbox-terms.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import CheckboxTerms from './checkbox-terms'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/inputs/CheckboxTerms',
6 | component: CheckboxTerms
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | onchange: () => {},
14 | onAccept: () => {}
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/input-comment/input-comment.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import InputComment from './input-comment'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Inputs/InputComment',
6 | component: InputComment
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | placeholder: 'Write a comment...',
14 | value: ''
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/radios/radios.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { FormControlLabel as MuiFormControlLabel, Box as MuiBox } from '@mui/material'
3 |
4 | export const RowFormControlLabel = styled(MuiFormControlLabel)(({ theme }) => ({
5 | margin: '4px 0',
6 | display: 'flex',
7 | alignItems: 'flex-start'
8 | }))
9 |
10 | export const ContentBox = styled(MuiBox)(({ theme }) => ({
11 | marginTop: 10
12 | }))
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/solution-input/solution-input.styles.ts:
--------------------------------------------------------------------------------
1 | // Styles for Solution Input component
2 | // Using MUI sx style object so it can be passed directly via the `sx` prop.
3 | // Keep minimal to preserve existing appearance while centralizing styles.
4 | import { SxProps, Theme } from '@mui/material/styles'
5 |
6 | export const solutionInputSx: SxProps = {
7 | '& .MuiFilledInput-input': {
8 | padding: '12px 14px'
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/content/empty/empty-payment-request/empty-payment-request.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import EmptyPaymentRequest from './empty-payment-request'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Empty/EmptyPaymentRequest',
6 | component: EmptyPaymentRequest
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {}
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/form-section/card-number-form/card-number-form.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { CardElement } from '@stripe/react-stripe-js'
3 |
4 | const CardSection = (props) => {
5 | return (
6 |
15 | )
16 | }
17 |
18 | export default CardSection
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/form-section/login-form/login-form-forgot/login-form-forgot.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import LoginFormForgot from './login-form-forgot'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/FormSection/LoginForm/LoginFormForgot',
6 | component: LoginFormForgot
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {}
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/payout-forms/payout-schedule-form/payout-schedule-form.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const RightActions = styled('div')(({ theme }) => ({
4 | marginTop: 20,
5 | display: 'flex',
6 | justifyContent: 'flex-end'
7 | }))
8 |
9 | export const AutomaticOptions = styled('div')(({ theme }) => ({
10 | width: 400,
11 | '& .MuiTypography-caption': {
12 | marginTop: 20
13 | }
14 | }))
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/signup-forms/signup-signin/signup-signin.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const SecondaryActionsContainerStyled = styled('div')(({ theme }) => ({
4 | display: 'flex',
5 | justifyContent: 'space-around',
6 | marginRight: 20,
7 | [theme.breakpoints.down('sm')]: {
8 | marginTop: 10,
9 | marginRight: 0,
10 | width: '100%',
11 | justifyContent: 'center'
12 | }
13 | }))
14 |
--------------------------------------------------------------------------------
/src/app/routes/paymentRequest.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const secure = require('./secure')
5 | const controllers = require('../controllers/payment-request')
6 |
7 | router.use(secure)
8 | router.post('/', controllers.createPaymentRequest)
9 | router.get('/', controllers.listPaymentRequests)
10 | router.put('/:id', controllers.updatePaymentRequest)
11 |
12 | module.exports = router
13 |
--------------------------------------------------------------------------------
/test/data/stripe/balance.transaction.js:
--------------------------------------------------------------------------------
1 | module.exports.get = {
2 | id: 'txn_1CdprOLlCJ9CeQRe7gBPy9Lo',
3 | object: 'balance_transaction',
4 | amount: -400,
5 | available_on: 1678043844,
6 | created: 1678043844,
7 | currency: 'usd',
8 | description: null,
9 | exchange_rate: null,
10 | fee: 0,
11 | fee_details: [],
12 | net: -400,
13 | reporting_category: 'transfer',
14 | source: 'tr_1CZ5vkLlCJ9CeQRe',
15 | status: 'available',
16 | type: 'transfer'
17 | }
18 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/checkboxes/checkboxes.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Checkbox } from '@mui/material'
3 |
4 | export const CheckboxesContainer = styled('div')(({ theme }) => ({
5 | color: '#a9a9a9'
6 | }))
7 |
8 | export const CheckboxItem = styled('div')(({ theme }) => ({
9 | paddingBottom: 0
10 | }))
11 |
12 | export const StyledCheckbox = styled(Checkbox)(({ theme }) => ({
13 | paddingRight: 5
14 | }))
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/private-pages/data-pages/primary-data-page/primary-data-page.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const CardsWrapper = styled('div')(({ theme }) => ({
4 | display: 'flex',
5 | gap: '16px',
6 | marginBottom: '16px',
7 | justifyContent: 'flex-end',
8 | [theme.breakpoints.down('sm')]: {
9 | flexDirection: 'column',
10 | alignItems: 'stretch',
11 | border: '1px solid red'
12 | }
13 | }))
14 |
--------------------------------------------------------------------------------
/frontend/src/types/table.ts:
--------------------------------------------------------------------------------
1 | import { type CardProps } from './card'
2 |
3 | export type TableTabsContentProps = {
4 | tableData: {
5 | completed: boolean
6 | data: Array
7 | }
8 | tableHeaderMetadata: any
9 | customColumnRenderer?: { [key: string]: (value: any, rowData: any) => React.ReactNode }
10 | }
11 |
12 | export type TableTabsProps = {
13 | label: React.ReactNode
14 | value: string
15 | table: TableTabsContentProps
16 | cards?: Array
17 | }
18 |
--------------------------------------------------------------------------------
/test/data/stripe/stripe.invoiceitem.js:
--------------------------------------------------------------------------------
1 | module.exports.created = {
2 | id: 'ii_1Q2fh8BrSjgsps2DQqY9k2h3',
3 | currency: 'usd',
4 | customer: 'cus_QsYn1aSStYv4tf',
5 | description:
6 | 'Development service for solving an issue on Gitpay: Add language to issue on explore (http://localhost:3000/#/task/15)',
7 | invoice: 'in_1Q2fh8BrSjgsps2DUqQsGLDj',
8 | metadata: {
9 | order_id: '13',
10 | task_id: '15'
11 | },
12 | quantity: '1',
13 | unit_amount: '10800'
14 | }
15 |
--------------------------------------------------------------------------------
/docker-compose.test.yml:
--------------------------------------------------------------------------------
1 | version: '3.7'
2 |
3 | services:
4 | backend_test:
5 | image: node:8.6
6 | command: sh -c "npm install && npm run migrate-test && npm run test"
7 | working_dir: /gitpay
8 | volumes:
9 | - .:/gitpay
10 | environment:
11 | - NODE_ENV=test
12 | network_mode: host
13 | db_test:
14 | image: postgres
15 | environment:
16 | - POSTGRES_PASSWORD=postgres
17 | - POSTGRES_DB=gitpay_test
18 | network_mode: host
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tabs/bank-account-tabs/bank-account-tabs.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import BankAccountTabs from './bank-account-tabs'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Tabs/BankAccountTabs',
6 | component: BankAccountTabs
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here if needed
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/payment-request-forms/payment-request-form/payment-request-form.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const AlertWrapper = styled('div')(({ theme }) => ({
4 | marginBottom: 20,
5 | marginTop: 20
6 | }))
7 |
8 | export const AlertInner = styled('div')(({ theme }) => ({
9 | marginBottom: 20
10 | }))
11 |
12 | export const EndAdornment = styled('div')(({ theme }) => ({
13 | marginLeft: 8
14 | }))
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/buttons/import-issue-button/import-issue-button.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ImportIssueButton from './import-issue-button'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Buttons/ImportIssueButton',
6 | component: ImportIssueButton
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/buttons/issue-actions/issue-actions.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ActionButtons from '../action-buttons/action-buttons'
3 |
4 | interface IssueActionsProps {
5 | role: string
6 | roles: any
7 | children?: React.ReactNode
8 | }
9 |
10 | const IssueActions = ({ role, roles }: IssueActionsProps) => {
11 | return
12 | }
13 |
14 | export default IssueActions
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/drawers/offer-drawer/components/actions.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const Root = styled('div')(({ theme }) => ({
4 | display: 'flex',
5 | justifyContent: 'space-between',
6 | padding: theme.spacing(2)
7 | }))
8 |
9 | export const RightActions = styled('div')(() => ({
10 | display: 'flex',
11 | justifyContent: 'flex-end',
12 | margin: 10
13 | }))
14 |
15 | export default { Root, RightActions }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/base/text-field/text-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import TextField from './text-field'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Tables/Base/TextField',
6 | component: TextField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | title: 'Sample Text Field'
14 | }
15 |
--------------------------------------------------------------------------------
/src/app/routes/wallet.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/wallet')
5 | const secure = require('./secure')
6 |
7 | router.use(secure)
8 |
9 | router.post('/', controllers.createWallet)
10 | router.put('/:id', controllers.updateWallet)
11 | router.get('/', controllers.walletList)
12 | router.get('/:id', controllers.walletFetch)
13 |
14 | module.exports = router
15 |
--------------------------------------------------------------------------------
/src/models/assign.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const Assign = sequelize.define('Assign', {
3 | status: {
4 | type: DataTypes.STRING,
5 | defaultValue: 'pending'
6 | },
7 | message: {
8 | type: DataTypes.STRING
9 | }
10 | })
11 |
12 | Assign.associate = (models) => {
13 | Assign.belongsTo(models.User, { foreignKey: 'userId' })
14 | Assign.belongsTo(models.Task, { foreignKey: 'TaskId' })
15 | }
16 |
17 | return Assign
18 | }
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/price-input/price-input.styles.ts:
--------------------------------------------------------------------------------
1 | import { Theme } from '@mui/material/styles'
2 |
3 | export const getPriceInputStyles = (theme: Theme) => ({
4 | formPayment: {
5 | marginTop: 10,
6 | marginBottom: 10
7 | },
8 | currencySymbol: {
9 | fontSize: 28
10 | },
11 | input: {
12 | fontSize: 42,
13 | fontWeight: 'bold',
14 | textAlign: 'right',
15 | height: 98
16 | }
17 | })
18 |
19 | export default getPriceInputStyles
20 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/issue-forms/import-issue/import-issue.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ImportIssue from './import-issue'
3 |
4 | export default {
5 | title: 'Design Library/Organisms/Forms/IssueForms/ImportIssue',
6 | component: ImportIssue
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | onImport: () => {}
15 | }
16 |
--------------------------------------------------------------------------------
/src/db/migrations/20201218194527-add-organizationId-to-project.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | up: (queryInterface, Sequelize) => {
3 | queryInterface.addColumn('Projects', 'OrganizationId', {
4 | type: Sequelize.INTEGER,
5 | references: {
6 | model: 'Organizations',
7 | key: 'id'
8 | },
9 | allowNull: true
10 | })
11 | },
12 |
13 | down: (queryInterface, Sequelize) => {
14 | queryInterface.removeColumn('Projects', 'OrganizationId')
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/modules/team/requestJoinCoreTeam.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const SendMail = require('../mail/mail')
3 | const { joinTeamEmail } = require('../mail/constants')
4 |
5 | module.exports = Promise.method(function requestJoinCoreTeam(params) {
6 | SendMail.success(
7 | { email: joinTeamEmail, language: 'en', receiveNotifications: true },
8 | 'Want to join Core Team',
9 | 'The user with the email ' + params.param.email + ' wants to join to Gitpay core tem'
10 | )
11 | })
12 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/dashboard-card-list/dashboard-card-list.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const ContentWrapper = styled('div')({
4 | marginBottom: 40
5 | })
6 |
7 | export const CardList = styled('div')(({ theme }) => ({
8 | alignItems: 'center',
9 | display: 'flex',
10 | justifyContent: 'center',
11 | flexWrap: 'wrap',
12 | [theme.breakpoints.down('sm')]: {
13 | display: 'block'
14 | }
15 | }))
16 |
--------------------------------------------------------------------------------
/frontend/src/containers/team.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux'
2 | import Team from '../components/areas/public/features/team/pages/team'
3 | import { joinTeam } from '../actions/teamActions'
4 |
5 | const mapStateToProps = (state, ownProps) => {
6 | return state
7 | }
8 |
9 | const mapDispatchToProps = (dispatch, ownProps) => {
10 | return {
11 | joinTeamAPICall: (email) => dispatch(joinTeam(email))
12 | }
13 | }
14 |
15 | export default connect(mapStateToProps, mapDispatchToProps)(Team)
16 |
--------------------------------------------------------------------------------
/frontend/src/main/app.css:
--------------------------------------------------------------------------------
1 | html {
2 | margin: 0;
3 | height: 100%;
4 | }
5 |
6 | body {
7 | margin: 0;
8 | height: 100%;
9 | }
10 |
11 | #app {
12 | height: 100%;
13 | }
14 |
15 | #app > div
16 | {
17 | height: 100%;
18 | }
19 |
20 | a {
21 | color: inherit;
22 | }
23 |
24 | .MuiTypography-noWrap-112 {
25 | overflow: hidden;
26 | white-space: normal !important;
27 | text-overflow: ellipsis;
28 | }
29 |
30 | .MuiTypography-body2 img {
31 | width: 100%;
32 | height: 100%;
33 | }
34 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/private/features/account/components/account-tab-main.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import Typography from '@mui/material/Typography'
3 |
4 | export const LegendText = styled(Typography)(({ theme }) => ({
5 | fontSize: 18,
6 | fontWeight: 500,
7 | color: theme.palette.primary.dark
8 | }))
9 |
10 | export const Fieldset = styled('fieldset')(({ theme }) => ({
11 | border: `1px solid ${theme.palette.primary.light}`,
12 | marginBottom: 20
13 | }))
14 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/fields/account-type-field/account-type.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import AccountTypeField from './account-type-field'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Inputs/Fields/AccountTypeField',
6 | component: AccountTypeField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | disabled: false,
14 | type: 'individual'
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/form-section/login-form/login-form-reset/login-form-reset.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import LoginFormReset from './login-form-reset'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/FormSection/LoginForm/LoginFormReset',
6 | component: LoginFormReset
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tabs/payout-settings-tabs/payout-settings-tabs.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PayoutSettingsTabs from './payout-settings-tabs'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Tabs/PayoutSettingsTabs',
6 | component: PayoutSettingsTabs
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here if needed
14 | }
15 |
--------------------------------------------------------------------------------
/src/db/migrations/20251211223254-add-arrival-date-to-payout.ts:
--------------------------------------------------------------------------------
1 | import { QueryInterface, DataTypes } from 'sequelize'
2 |
3 | export async function up({ queryInterface }: { queryInterface: QueryInterface }) {
4 | await queryInterface.addColumn('Payouts', 'arrival_date', {
5 | type: DataTypes.BIGINT,
6 | allowNull: true
7 | })
8 | }
9 |
10 | export async function down({ queryInterface }: { queryInterface: QueryInterface }) {
11 | await queryInterface.removeColumn('Payouts', 'arrival_date')
12 | }
13 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "type": "pwa-chrome",
9 | "request": "launch",
10 | "name": "Launch Chrome against localhost",
11 | "url": "http://localhost:8080",
12 | "webRoot": "${workspaceFolder}"
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/buttons/signin-buttons/signin-buttons.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import SignInButtons from './signin-buttons'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Buttons/SignInButtons',
6 | component: SignInButtons
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | onSignup: () => {},
15 | onSignin: () => {}
16 | }
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/switchers/language-switcher/language-switcher.styles.ts:
--------------------------------------------------------------------------------
1 | import { Avatar } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 | import media from '../../../../../styleguide/media'
4 |
5 | export const StyledAvatarIconOnly = styled(Avatar)`
6 | margin-left: 20px;
7 | cursor: pointer;
8 | align-items: center;
9 | ${media.phone`margin-left: 15px;`}
10 |
11 | @media(max-width: 37.5em) {
12 | margin-bottom: 20px !important;
13 | }
14 | `
15 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/private/features/account/features/account-skills/skill.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Avatar } from '@mui/material'
3 |
4 | // Styled Avatar for the Skill component
5 | export const SkillAvatar = styled(Avatar, {
6 | shouldForwardProp: (prop) => prop !== 'greyed'
7 | })<{ greyed?: boolean }>(({ theme, greyed }) => ({
8 | borderRadius: 0,
9 | backgroundColor: 'transparent',
10 | ...(greyed && {
11 | filter: 'grayscale(0.8)'
12 | })
13 | }))
14 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/explore/pages/explore-projects-page.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react'
2 | import ProjectListFull from 'design-library/molecules/lists/project-list/project-list-full/project-list-full'
3 |
4 | const ExploreProjectsPage = ({ listProjects, projects }) => {
5 | useEffect(() => {
6 | listProjects()
7 | }, [])
8 |
9 | return (
10 | <>
11 |
12 | >
13 | )
14 | }
15 |
16 | export default ExploreProjectsPage
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/buttons/provider-login-buttons/provider-login-buttons.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ProviderLoginButtons from './provider-login-buttons'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Buttons/ProviderLoginButtons',
6 | component: ProviderLoginButtons
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here if any
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/buttons/provider-login-buttons/provider-login-buttons.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const ButtonWithMargin = styled('span')(() => ({
4 | marginRight: 10
5 | }))
6 |
7 | export const TextMargin = styled('span')(() => ({
8 | marginLeft: 10
9 | }))
10 |
11 | export const LinkMargin = styled('a')(() => ({
12 | display: 'inline-box',
13 | marginLeft: 5
14 | }))
15 |
16 | export default { ButtonWithMargin, TextMargin, LinkMargin }
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/base/created-field/created-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import CreatedField from './created-field'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Tables/Base/CreatedField',
6 | component: CreatedField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | createdAt: '2023-10-01T12:00:00Z'
14 | }
15 |
--------------------------------------------------------------------------------
/src/app/controllers/payment-request-balance.ts:
--------------------------------------------------------------------------------
1 | import { paymentRequestBalanceList } from '../../modules/paymentRequestBalance'
2 |
3 | export const listPaymentRequestBalances = async (req: any, res: any) => {
4 | const userId = req.user.id
5 |
6 | try {
7 | const balances = await paymentRequestBalanceList({ userId })
8 | res.status(200).json(balances)
9 | } catch (error: any) {
10 | console.error('Error retrieving balances:', error)
11 | res.status(500).json({ error: error.message })
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/app/controllers/payment-request-payment.ts:
--------------------------------------------------------------------------------
1 | import { paymentRequestPaymentList } from '../../modules/paymentRequestPayments'
2 |
3 | export const listPaymentRequestPayments = async (req: any, res: any) => {
4 | const userId = req.user.id
5 |
6 | try {
7 | const payments = await paymentRequestPaymentList({ userId })
8 | res.status(200).json(payments)
9 | } catch (error: any) {
10 | console.error('Error retrieving payments:', error)
11 | res.status(500).json({ error: error.message })
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/db/migrations/20251211232235-add-reference-number-to-payout.ts:
--------------------------------------------------------------------------------
1 | import { QueryInterface, DataTypes } from 'sequelize'
2 |
3 | export async function up({ queryInterface }: { queryInterface: QueryInterface }) {
4 | await queryInterface.addColumn('Payouts', 'reference_number', {
5 | type: DataTypes.STRING,
6 | allowNull: true
7 | })
8 | }
9 |
10 | export async function down({ queryInterface }: { queryInterface: QueryInterface }) {
11 | await queryInterface.removeColumn('Payouts', 'reference_number')
12 | }
13 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "module": "CommonJS",
5 | "moduleResolution": "Node",
6 |
7 | "rootDir": "src",
8 | "outDir": "dist",
9 |
10 | "allowJs": true, // <-- keep .js files
11 | "checkJs": false, // you can flip true later to typecheck .js
12 | "esModuleInterop": true,
13 | "resolveJsonModule": true,
14 | "skipLibCheck": true,
15 |
16 | "strict": true,
17 | "noEmitOnError": true
18 | },
19 | "include": ["src/**/*"]
20 | }
21 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/private/features/projects/project-page.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | // Wrapper for the tabbed table area
4 | export const RootTabs = styled('div')(({ theme }) => ({
5 | marginRight: theme.spacing(3),
6 | marginBottom: theme.spacing(3)
7 | }))
8 |
9 | // Optional utility styles kept for future parity if needed
10 | export const GutterLeft = styled('div')({
11 | marginLeft: 10
12 | })
13 |
14 | export const Media = styled('div')({
15 | width: 600
16 | })
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/sections/stats-bar/stats-bar.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import StatsBar from './stats-bar'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Sections/StatsBar',
6 | component: StatsBar
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | info: () => {},
15 | tasks: '20',
16 | bounties: '2000',
17 | users: '5000'
18 | }
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/base/amount-field/amount-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import AmountField from './amount-field'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Tables/Base/AmountField',
6 | component: AmountField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | value: 1000
15 | }
16 |
--------------------------------------------------------------------------------
/pmd.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/app/routes/walletOrder.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/walletOrder')
5 | const secure = require('./secure')
6 |
7 | router.use(secure)
8 |
9 | router.post('/', controllers.createWalletOrder)
10 | router.put('/:id', controllers.updateWalletOrder)
11 | router.get('/', controllers.walletOrderList)
12 | router.get('/:id', controllers.walletOrderFetch)
13 |
14 | module.exports = router
15 |
--------------------------------------------------------------------------------
/src/modules/paymentRequests/paymentRequestList.js:
--------------------------------------------------------------------------------
1 | const Stripe = require('stripe')
2 | const models = require('../../models')
3 |
4 | module.exports = async function paymentRequestList(paymentRequestParams) {
5 | const paymentRequestList = await models.PaymentRequest.findAll({
6 | where: {
7 | userId: paymentRequestParams.userId
8 | },
9 | order: [['createdAt', 'DESC']],
10 | include: [
11 | {
12 | model: models.User
13 | }
14 | ]
15 | })
16 | return paymentRequestList
17 | }
18 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Python & PostgreSQL Dev Container",
3 | "dockerComposeFile": "docker-compose.yml",
4 | "service": "app",
5 | "workspaceFolder": "/workspace",
6 | "extensions": [
7 | "ms-python.python",
8 | "ms-azuretools.vscode-docker",
9 | "ms-vscode-remote.remote-containers"
10 | ],
11 | "forwardPorts": [5432, 3000, 8082],
12 | "postCreateCommand": "pip install -r requirements.txt",
13 | "settings": {
14 | "terminal.integrated.shell.linux": "/bin/bash"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/loaders/loader/loader.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import CircularProgress from '@mui/material/CircularProgress'
3 |
4 | export const Root = styled('div')(() => ({
5 | flexGrow: 1,
6 | display: 'flex',
7 | justifyContent: 'center',
8 | alignItems: 'center',
9 | height: '100%'
10 | }))
11 |
12 | export const Progress = styled(CircularProgress)(() => ({
13 | color: '#009688'
14 | }))
15 |
16 | export default {
17 | Root,
18 | Progress
19 | }
20 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/drawers/drawer/drawer.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Fab } from '@mui/material'
3 |
4 | export const CloseFab = styled(Fab)(({ theme }) => ({
5 | position: 'absolute',
6 | right: theme.spacing(2),
7 | top: theme.spacing(2),
8 | backgroundColor: 'darkgray',
9 | color: 'white',
10 | boxShadow: 'none',
11 | '&:hover': {
12 | backgroundColor: 'gray',
13 | boxShadow: 'none'
14 | }
15 | }))
16 |
17 | export default { CloseFab }
18 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/dropdowns/issue-level-dropdown/issue-level-dropdown.stories.tsx:
--------------------------------------------------------------------------------
1 | import type { Meta, StoryObj } from '@storybook/react'
2 | import IssueLevelDropdown from './issue-level-dropdown'
3 |
4 | const meta: Meta = {
5 | title: 'Design Library/Atoms/Inputs/Dropdowns/IssueLevelDropdown',
6 | component: IssueLevelDropdown
7 | }
8 |
9 | export default meta
10 |
11 | type Story = StoryObj
12 |
13 | export const Default: Story = {
14 | args: {}
15 | }
16 |
--------------------------------------------------------------------------------
/src/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "development": {
3 | "username": "postgres",
4 | "password": "postgres",
5 | "database": "gitpay_dev",
6 | "host": "127.0.0.1",
7 | "port": 5432,
8 | "dialect": "postgres",
9 | "logging": false,
10 | "operatorsAliases": false
11 | },
12 | "test": {
13 | "username": "postgres",
14 | "password": "postgres",
15 | "database": "gitpay_test",
16 | "host": "127.0.0.1",
17 | "port": 5432,
18 | "dialect": "postgres",
19 | "logging": false
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/modules/tasks/taskExists.js:
--------------------------------------------------------------------------------
1 | const models = require('../../models')
2 | const Promise = require('bluebird')
3 |
4 | module.exports = Promise.method(function taskExists(taskAttributes) {
5 | return models.Task.findOne({
6 | where: {
7 | id: taskAttributes.id
8 | }
9 | })
10 | .then((task) => {
11 | if (!task) return false
12 | return task
13 | })
14 | .catch((error) => {
15 | // eslint-disable-next-line no-console
16 | console.log(error)
17 | throw error
18 | })
19 | })
20 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/explore/pages/explore-organization-page.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react'
2 | import OrganizationsListFull from 'design-library/molecules/lists/organization-list/organization-list-full/organization-list-full'
3 |
4 | const ExploreOrganizationPage = ({ organizations, listOrganizations }) => {
5 | useEffect(() => {
6 | listOrganizations?.()
7 | }, [])
8 |
9 | return
10 | }
11 |
12 | export default ExploreOrganizationPage
13 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/payout-forms/payout-schedule-form/payout-schedule-form.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PayoutScheduleForm from './payout-schedule-form'
3 |
4 | export default {
5 | title: 'Design Library/Organisms/Forms/PayoutForms/PayoutScheduleForm',
6 | component: PayoutScheduleForm
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here if needed
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/containers/task-solve.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux'
2 | import { getTaskOrdersByFilter } from '../selectors/task'
3 | import TaskSolve from '../components/areas/public/features/issue/task-solve'
4 |
5 | const mapStateToProps = (state, ownProps) => {
6 | return {
7 | logged: state.loggedIn,
8 | task: getTaskOrdersByFilter(state)
9 | }
10 | }
11 |
12 | const mapDispatchToProps = (dispatch, ownProps) => {
13 | return {}
14 | }
15 |
16 | export default connect(mapStateToProps, mapDispatchToProps)(TaskSolve)
17 |
--------------------------------------------------------------------------------
/src/models/label.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const Label = sequelize.define(
3 | 'Label',
4 | {
5 | name: DataTypes.STRING
6 | },
7 | {}
8 | )
9 | Label.associate = function (models) {
10 | Label.belongsToMany(models.Task, {
11 | alloqNull: false,
12 | foreignKey: 'labelId',
13 | otherKey: 'taskId',
14 | through: 'TaskLabels',
15 | onUpdate: 'cascade',
16 | onDelete: 'cascade',
17 | hooks: true
18 | })
19 | }
20 |
21 | return Label
22 | }
23 |
--------------------------------------------------------------------------------
/src/modules/organizations/organizationBuilds.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(function organizationBuilds(organizationParameters) {
5 | return models.Organization.build(organizationParameters)
6 | .save()
7 | .then((data) => {
8 | return data
9 | })
10 | .catch((error) => {
11 | // eslint-disable-next-line no-console
12 | console.log('error from organizationBuilds', error)
13 | return false
14 | })
15 | })
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/alerts/simple-info/simple-info.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Info as InfoIcon } from '@mui/icons-material'
3 | import { SimpleInfoRoot, IconCenter, Text } from './simple-info.styles'
4 |
5 | export const SimpleInfo = ({ text }) => {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 | {text}
13 |
14 |
15 | )
16 | }
17 |
18 | export default SimpleInfo
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/loaders/placeholders/avatar-placeholder.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { AvatarPlaceholder } from './avatar-placeholder'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Loaders/Placeholders/AvatarPlaceholder',
6 | component: AvatarPlaceholder
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | src: 'https://via.placeholder.com/150',
14 | alt: 'Default Avatar'
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/typography/secondary-title/secondary-title.stories.tsx:
--------------------------------------------------------------------------------
1 | import SecondaryTitle from './secondary-title'
2 |
3 | const meta = {
4 | title: 'Design Library/Atoms/Typography/Titles/SecondaryTitle',
5 | component: SecondaryTitle,
6 | args: {
7 | title: 'Sample Title',
8 | subtitle: 'This is a subtitle'
9 | }
10 | }
11 |
12 | export default meta
13 |
14 | export const Default = {
15 | args: {
16 | title: 'Default Title',
17 | subtitle: 'This is a default subtitle'
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/spot-card/spot-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { Card, CardContent } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const StyledCard = styled(Card)(() => ({
5 | minWidth: 420,
6 | marginTop: 40,
7 | opacity: 0.8,
8 | overflow: 'visible'
9 | }))
10 |
11 | export const StyledCardContent = styled(CardContent)(() => ({
12 | textAlign: 'center',
13 | position: 'relative'
14 | }))
15 |
16 | export const Content = styled('div')({
17 | marginTop: 20
18 | })
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/content/introduction/introduction.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Introduction from './introduction'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Content/Introduction',
6 | component: Introduction
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | title: 'Introduction',
14 | image: 'https://via.placeholder',
15 | children: 'This is the introduction text'
16 | }
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/dialogs/privacy-dialog/privacy-dialog.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Dialog, DialogContent } from '@mui/material'
3 | import PrivacyPolicy from '../../content/terms/privacy-policy/privacy-policy'
4 |
5 | const PrivacyDialog = ({ open, onClose }) => {
6 | return (
7 |
12 | )
13 | }
14 |
15 | export default PrivacyDialog
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/dialogs/terms-dialog/terms-dialog.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Dialog, DialogContent } from '@mui/material'
3 | import TermsOfService from '../../content/terms/terms-of-service/terms-of-service'
4 |
5 | const TermsDialog = ({ open, onClose }) => {
6 | return (
7 |
12 | )
13 | }
14 |
15 | export default TermsDialog
16 |
--------------------------------------------------------------------------------
/frontend/src/containers/task-filter.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-console */
2 | import { connect } from 'react-redux'
3 | import { filterTasks } from '../actions/taskActions'
4 | import IssueFilter from '../components/design-library/atoms/filters/issue-filter/issue-filter'
5 |
6 | const mapStateToProps = (state) => ({
7 | issues: state.issues.data,
8 | filteredIssues: state.issues.filteredData
9 | })
10 |
11 | const mapDispatchToProps = {
12 | filterTasks
13 | }
14 |
15 | export default connect(mapStateToProps, mapDispatchToProps)(IssueFilter)
16 |
--------------------------------------------------------------------------------
/frontend/src/reducers/teamReducer.js:
--------------------------------------------------------------------------------
1 | import { JOIN_TEAM_REQUESTED, JOIN_TEAM_SUCCESS, JOIN_TEAM_ERROR } from '../actions/teamActions'
2 |
3 | export const team = (state = { completed: true }, action) => {
4 | switch (action.type) {
5 | case JOIN_TEAM_REQUESTED:
6 | return { ...state, completed: false }
7 | case JOIN_TEAM_SUCCESS:
8 | return { ...state, completed: true }
9 | case JOIN_TEAM_ERROR:
10 | return { ...state, completed: true, error: action.error }
11 | default:
12 | return state
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/app/routes/taskSolutions.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('../../modules/authenticationHelpers')
4 | const controllers = require('../controllers/taskSolution')
5 | const secure = require('./secure')
6 |
7 | router.use(secure)
8 |
9 | router.get('/', controllers.getTaskSolution)
10 | router.get('/fetch', controllers.fetchPullRequestData)
11 | router.post('/create', controllers.createTaskSolution)
12 | router.patch('/:id', controllers.updateTaskSolution)
13 |
14 | module.exports = router
15 |
--------------------------------------------------------------------------------
/src/modules/orders/orderExists.js:
--------------------------------------------------------------------------------
1 | const models = require('../../models')
2 | const Promise = require('bluebird')
3 |
4 | module.exports = Promise.method(function orderExists(orderAttributes) {
5 | return models.Order.findOne({
6 | where: {
7 | id: orderAttributes.id
8 | }
9 | })
10 | .then((order) => {
11 | if (!order) return false
12 | return order
13 | })
14 | .catch((error) => {
15 | // eslint-disable-next-line no-console
16 | console.log(error)
17 | throw error
18 | })
19 | })
20 |
--------------------------------------------------------------------------------
/frontend/src/main/routes-sitemap.js:
--------------------------------------------------------------------------------
1 | const routes = [
2 | { path: '/', exact: true },
3 | { path: '/recruitment' },
4 | { path: '/tasks/createdbyme' },
5 | { path: '/tasks/interested' },
6 | { path: '/tasks/assignedtome' },
7 | { path: '/tasks/all' },
8 | { path: '/tasks/open' },
9 | { path: '/tasks/progress' },
10 | { path: '/tasks/finished' },
11 | { path: '/login', exact: true },
12 | // redirect (usually excluded from sitemap)
13 | { path: '/tasks/explore', redirectTo: '/tasks/open' }
14 | ]
15 |
16 | export default routes
17 |
--------------------------------------------------------------------------------
/frontend/translation.js:
--------------------------------------------------------------------------------
1 | const extractReactIntl = require('extract-react-intl')
2 |
3 | const pattern = 'src/**/*.js'
4 | const locales = ['en', 'br']
5 |
6 | extractReactIntl(locales, pattern).then((result) => {
7 | // eslint-disable-next-line no-console
8 | console.log(JSON.stringify(result))
9 |
10 | /*
11 | {
12 | en:
13 | { 'components/App/hello': 'hello',
14 | 'components/App/welcome': 'welcome to extract-react-intl' }
15 | ja:
16 | { 'components/App/hello': '',
17 | 'components/App/world': '' }
18 | }
19 | */
20 | })
21 |
--------------------------------------------------------------------------------
/frontend/build/messages/src/components/profile/preferences.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "preferences.title.main",
4 | "defaultMessage": "Preferences"
5 | },
6 | {
7 | "id": "preferences.os",
8 | "defaultMessage": "OS"
9 | },
10 | {
11 | "id": "prefences.header.title",
12 | "defaultMessage": "Preferences"
13 | },
14 | {
15 | "id": "prefences.header.sub",
16 | "defaultMessage": "My language preferences"
17 | },
18 | {
19 | "id": "prefences.my.skills.zero",
20 | "defaultMessage": "No skills selected"
21 | }
22 | ]
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/forms/subscribe-forms/subscribe-form/subscribe-form.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import SubscribeForm from './subscribe-form'
3 |
4 | export default {
5 | title: 'Design Library/Organisms/Forms/SubscribeForms/SubscribeForm',
6 | component: SubscribeForm
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here if any
14 | render: true,
15 | type: 'subscribe-form'
16 | }
17 |
--------------------------------------------------------------------------------
/src/modules/paymentRequestsTransfers/paymentRequestsTransfersUpdate.js:
--------------------------------------------------------------------------------
1 | const models = require('../../models')
2 |
3 | module.exports = async function paymentRequestTransferUpdate(paymentRequestTransferUpdateParams) {
4 | const { id, ...updateData } = paymentRequestTransferUpdateParams
5 | const transfer = await models.PaymentRequestTransfer.findByPk(id)
6 | if (!transfer) {
7 | throw new Error('Transfer not found')
8 | }
9 | await transfer.update(updateData, {
10 | returning: true
11 | })
12 | transfer.reload()
13 | return transfer
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/containers/profile-head.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux'
2 | import ProfileHead from '../components/areas/private/components/profile-head'
3 | import { getUserTypes } from '../actions/profileActions'
4 |
5 | const mapStateToProps = (state) => {
6 | return {
7 | profile: state.profileReducer.data
8 | }
9 | }
10 |
11 | const mapDispatchToProps = (dispatch) => {
12 | return {
13 | getUserTypes: (userId) => dispatch(getUserTypes(userId))
14 | }
15 | }
16 |
17 | export default connect(mapStateToProps, mapDispatchToProps)(ProfileHead)
18 |
--------------------------------------------------------------------------------
/frontend/src/containers/provider-login-buttons.tsx:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux'
2 | import { authorizeGithub, disconnectGithub } from '../actions/loginActions'
3 | import ProviderLoginButtons from '../components/areas/private/components/session/provider-login-buttons'
4 |
5 | const mapDispatchToProps = (dispatch, ownProps) => {
6 | return {
7 | authorizeGithub: () => dispatch(authorizeGithub()),
8 | disconnectGithub: () => dispatch(disconnectGithub())
9 | }
10 | }
11 |
12 | export default connect(null, mapDispatchToProps)(ProviderLoginButtons)
13 |
--------------------------------------------------------------------------------
/src/app/routes/webhooks.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | const controllerConnect = require('../controllers/webhooks/webhook-connect')
4 | const controllerPlatform = require('../controllers/webhooks/webhook-platform')
5 | const controllerGithub = require('../controllers/webhooks/webhook-github')
6 |
7 | router.post('/stripe-platform', controllerPlatform.webhookPlatform)
8 | router.post('/stripe-connect', controllerConnect.webhookConnect)
9 | router.post('/github', controllerGithub.github)
10 |
11 | module.exports = router
12 |
--------------------------------------------------------------------------------
/frontend/src/styleguide/components/Page.tsx:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const PageContent = styled('div')(({ theme }) => ({
4 | backgroundColor: '#F7F7F7',
5 | padding: '0 0 0 0'
6 | }))
7 |
8 | export const Page = styled('div')({
9 | overflowX: 'hidden'
10 | })
11 |
12 | export const PageContentWrapper = styled('div')(({ theme }) => ({
13 | display: 'flex',
14 | minHeight: '100%',
15 | flexDirection: 'row',
16 | [theme.breakpoints.down('sm')]: {
17 | display: 'flex',
18 | flexDirection: 'column'
19 | }
20 | }))
21 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/organisms/layouts/bottom-bar-layouts/bottom-bar-layout/bottom-bar-layout.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Bottom from './bottom-bar-layout'
3 |
4 | export default {
5 | title: 'Design Library/Organisms/Layouts/BottomBar/BottomBar',
6 | component: Bottom
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | getInfo: () => {},
15 | tasks: '20',
16 | bounties: '2000',
17 | users: '5000'
18 | }
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/pages/public-pages/pricing-public-page/pricing-public-page.stories.tsx:
--------------------------------------------------------------------------------
1 | import type { Meta, StoryObj } from '@storybook/react'
2 | import PricingPublicPage from './pricing-public-page'
3 |
4 | const meta: Meta = {
5 | title: 'Design Library/Pages/Public/Pricing',
6 | component: PricingPublicPage,
7 | parameters: {
8 | layout: 'fullscreen'
9 | }
10 | }
11 |
12 | export default meta
13 |
14 | type Story = StoryObj
15 |
16 | export const Basic: Story = {
17 | args: {}
18 | }
19 |
--------------------------------------------------------------------------------
/src/modules/roles/roleExists.js:
--------------------------------------------------------------------------------
1 | const models = require('../../models')
2 | const Promise = require('bluebird')
3 |
4 | module.exports = Promise.method(function memberExists(roleAttributes) {
5 | return models.Role.findOne({
6 | where: {
7 | name: roleAttributes.name
8 | }
9 | })
10 | .then((role) => {
11 | if (!role) return false
12 | return role
13 | })
14 | .catch((error) => {
15 | // eslint-disable-next-line no-console
16 | console.log('error to obtain existent role', error)
17 | throw error
18 | })
19 | })
20 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/fields/birth-date-field/birth-date-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import BirthDateField from './birth-date-field'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Inputs/Fields/BirthDateField',
6 | component: BirthDateField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {}
13 |
14 | export const PreFilled = Template.bind({})
15 | PreFilled.args = {
16 | day: 15,
17 | month: 8,
18 | year: 1990
19 | }
20 |
--------------------------------------------------------------------------------
/src/models/member.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const Member = sequelize.define('Member', {
3 | roleId: {
4 | type: DataTypes.INTEGER,
5 | references: {
6 | model: 'Roles',
7 | key: 'id'
8 | },
9 | allowNull: true
10 | }
11 | })
12 |
13 | Member.associate = (models) => {
14 | Member.belongsTo(models.User, { foreignKey: 'userId' })
15 | Member.belongsTo(models.Task, { foreignKey: 'taskId' })
16 | Member.belongsTo(models.Role, { foreignKey: 'roleId' })
17 | }
18 |
19 | return Member
20 | }
21 |
--------------------------------------------------------------------------------
/test/ping.test.js:
--------------------------------------------------------------------------------
1 | // test/ping.test.js
2 | const supertest = require('supertest')
3 | const express = require('express')
4 | const app = express()
5 |
6 | app.get('/ping', (req, res) => {
7 | res.status(200).json({ pong: true })
8 | })
9 |
10 | describe('Ping Test', () => {
11 | it('should respond to /ping', (done) => {
12 | supertest(app)
13 | .get('/ping')
14 | .expect(200)
15 | .end((err, res) => {
16 | if (err) return done(err)
17 | console.log(res.body) // deve ser { pong: true }
18 | done()
19 | })
20 | })
21 | })
22 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/fields/phone-number-field/phone-number-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PhoneNumberField from './phone-number-field'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Inputs/Fields/PhoneNumberField',
6 | component: PhoneNumberField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | phone: '1234567890'
14 | }
15 |
16 | export const Empty = Template.bind({})
17 | Empty.args = {
18 | phone: ''
19 | }
20 |
--------------------------------------------------------------------------------
/src/modules/tasks/taskMessageAuthor.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 | const TaskMail = require('../mail/task')
4 | const i18n = require('i18n')
5 |
6 | module.exports = Promise.method(function ({ id }, { message }, user) {
7 | return models.Task.findByPk(id, { include: [models.User] }).then((task) => {
8 | const taskUser = task.User.dataValues
9 | const language = taskUser.language || 'en'
10 | i18n.setLocale(language)
11 | TaskMail.messageAuthor(user.dataValues, task, message)
12 | return task
13 | })
14 | })
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/fields/bank-select-field/bank-select-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import BankSelectField from './bank-select-field'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Inputs/Fields/BankSelectField',
6 | component: BankSelectField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | routingNumber: '123456789',
14 | country: 'BR',
15 | onChange: (e) => console.log(e.target.value),
16 | disabled: false
17 | }
18 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/dashboard-cards/bank-account-dashboard-card/bank-account-dashboard-card.stories.tsx:
--------------------------------------------------------------------------------
1 | import type { Meta, StoryObj } from '@storybook/react'
2 | import BankAccountDashboardCard from './bank-account-dashboard-card'
3 |
4 | const meta: Meta = {
5 | title: 'Design Library/Molecules/Cards/DashboardCards/BankAccountDashboardCard',
6 | component: BankAccountDashboardCard
7 | }
8 |
9 | export default meta
10 | type Story = StoryObj
11 |
12 | export const Default: Story = {
13 | args: {}
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/issue/issue-price-field/issue-price-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import IssuePriceField from './issue-price-field'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Tables/Fields/Issue/IssuePriceField',
6 | component: IssuePriceField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | issue: {
15 | value: 100
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/modules/projects/projectList.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(function listProjects() {
5 | return models.Project.findAll({
6 | include: [
7 | models.Organization,
8 | {
9 | model: models.Task,
10 | include: [models.User]
11 | }
12 | ]
13 | })
14 | .then((data) => {
15 | return data
16 | })
17 | .catch((error) => {
18 | // eslint-disable-next-line no-console
19 | console.log(error)
20 | return false
21 | })
22 | })
23 |
--------------------------------------------------------------------------------
/src/modules/wallets/walletList.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(async function walletList(params) {
5 | const user =
6 | params.userId &&
7 | (await models.User.findOne({
8 | where: {
9 | id: params.userId
10 | }
11 | }))
12 |
13 | if (!user) {
14 | return { error: 'No valid user' }
15 | }
16 |
17 | return models.Wallet.findAll({
18 | where: {
19 | userId: user.id
20 | },
21 | hooks: true,
22 | individualHooks: true
23 | })
24 | })
25 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/fieldset/fieldset.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Typography, Skeleton } from '@mui/material'
3 | import { StyledFieldset, StyledLegend } from './fieldset.styles'
4 |
5 | const Fieldset = ({ children, completed, legend }) => {
6 | return (
7 |
8 |
9 | {legend}
10 |
11 | {!completed ? : children}
12 |
13 | )
14 | }
15 |
16 | export default Fieldset
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/typography/context-title/context-title.tsx:
--------------------------------------------------------------------------------
1 | import { Skeleton, Typography } from '@mui/material'
2 | import React from 'react'
3 |
4 | const ContextTitle = ({ context, title }) => {
5 | return (
6 |
7 | {title || }
8 |
9 | {context?.completed ? context?.data.name : }
10 |
11 |
12 | )
13 | }
14 |
15 | export default ContextTitle
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/dialogs/country-picker-dialog/country-picker-dialog.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import CountryPickerDialog from './country-picker-dialog'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Dialogs/CountryPickerDialog',
6 | component: CountryPickerDialog
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | open: true,
14 | onClose: (e, country) => {
15 | console.log('Dialog closed', e, country)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/frontend/src/containers/bottom.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux'
2 | import Bottom from '../components/shared/bottom/bottom'
3 | import { info } from '../actions/infoActions'
4 |
5 | const mapStateToProps = (state, ownProps) => {
6 | return {
7 | tasks: state.info.data.tasks,
8 | bounties: state.info.data.bounties,
9 | users: state.info.data.users
10 | }
11 | }
12 |
13 | const mapDispatchToProps = (dispatch, ownProps) => {
14 | return {
15 | info: () => dispatch(info())
16 | }
17 | }
18 |
19 | export default connect(mapStateToProps, mapDispatchToProps)(Bottom)
20 |
--------------------------------------------------------------------------------
/src/models/coupon.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const Coupon = sequelize.define('Coupon', {
3 | code: {
4 | type: DataTypes.STRING
5 | },
6 | amount: {
7 | type: DataTypes.DECIMAL
8 | },
9 | expires: {
10 | type: DataTypes.BOOLEAN
11 | },
12 | validUntil: {
13 | type: DataTypes.DATE
14 | },
15 | times: {
16 | type: DataTypes.INTEGER
17 | }
18 | })
19 |
20 | Coupon.associate = (models) => {
21 | Coupon.hasMany(models.Order, { foreignKey: 'couponId' })
22 | }
23 |
24 | return Coupon
25 | }
26 |
--------------------------------------------------------------------------------
/src/modules/offers/offerExists.js:
--------------------------------------------------------------------------------
1 | const models = require('../../models')
2 | const Promise = require('bluebird')
3 |
4 | module.exports = Promise.method(function offerExists(offerAttributes) {
5 | return models.Offer.findOne({
6 | where: {
7 | userId: offerAttributes.userId,
8 | taskId: offerAttributes.taskId
9 | }
10 | })
11 | .then((offer) => {
12 | if (!offer) return false
13 | return offer
14 | })
15 | .catch((error) => {
16 | // eslint-disable-next-line no-console
17 | console.log(error)
18 | throw error
19 | })
20 | })
21 |
--------------------------------------------------------------------------------
/src/modules/wallets/walletBuilds.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const Wallet = require('../../models').Wallet
3 | const User = require('../../models').User
4 |
5 | module.exports = Promise.method(async function walletBuilds(params) {
6 | const user =
7 | params.userId &&
8 | (await User.findOne({
9 | where: {
10 | id: params.userId
11 | }
12 | }))
13 |
14 | if (!user) {
15 | return { error: 'No valid user' }
16 | }
17 |
18 | return Wallet.create({
19 | userId: user.id,
20 | name: params.name,
21 | balance: 0
22 | })
23 | })
24 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/lists/pickup-tag-list/pickup-tag-list.styles.ts:
--------------------------------------------------------------------------------
1 | import { Chip } from '@mui/material'
2 | import { styled } from '@mui/material/styles'
3 |
4 | export const Root = styled('div')(({ theme }) => ({
5 | display: 'flex',
6 | flexDirection: 'column'
7 | }))
8 |
9 | export const ChipContainer = styled('div')(({ theme }) => ({
10 | marginTop: 12,
11 | marginBottom: 12,
12 | width: '100%'
13 | }))
14 |
15 | export const SpacedChip = styled(Chip)(({ theme }) => ({
16 | marginRight: theme.spacing(1),
17 | marginBottom: theme.spacing(1)
18 | }))
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/switchers/language-switcher/language-switcher.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import LanguageSwitcher from './language-switcher'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Switchers/LanguageSwitcher',
6 | component: LanguageSwitcher
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | completed: true,
15 | onSwitchLang: () => {},
16 | userCurrentLanguage: 'en',
17 | user: {}
18 | }
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/templates/base/private-base/private-base.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { AppBar, Grid, Container } from '@mui/material'
3 |
4 | export const RootGrid = styled(Grid)(() => ({
5 | backgroundColor: '#F7F7F7'
6 | }))
7 |
8 | export const SecondaryBar = styled(AppBar)(({ theme }) => ({
9 | backgroundColor: theme.palette.primary.light
10 | }))
11 |
12 | export const ContainerRoot = styled(Container)(({ theme }) => ({
13 | padding: theme.spacing(4)
14 | }))
15 |
16 | export default { RootGrid, SecondaryBar, ContainerRoot }
17 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/filters/issue-status-filter/issue-status-filter.stories.tsx:
--------------------------------------------------------------------------------
1 | import type { Meta, StoryObj } from '@storybook/react'
2 | import IssueStatusFilter from './issue-status-filter'
3 |
4 | // /src/components/design-library/atoms/filters/status-filter/status-filter.stories.tsx
5 |
6 | const meta: Meta = {
7 | title: 'design-library/atoms/Filters/IssueStatus',
8 | component: IssueStatusFilter,
9 | args: {}
10 | }
11 | export default meta
12 |
13 | type Story = StoryObj
14 |
15 | export const Default: Story = {}
16 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/fields/country-field/country-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import CountryField from './country-field'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Inputs/Fields/CountryField',
6 | component: CountryField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | country: 'BR',
14 | completed: true
15 | }
16 |
17 | export const Loading = Template.bind({})
18 | Loading.args = {
19 | country: 'BR',
20 | completed: false
21 | }
22 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/status/issue-status/issue-status.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import IssueStatus from './issue-status'
3 |
4 | export default {
5 | title: 'Design Library/Atoms/Status/IssueStatus',
6 | component: IssueStatus
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | status: 'open'
15 | }
16 |
17 | export const Closed = Template.bind({})
18 | Closed.args = {
19 | // Add default props here
20 | status: 'closed'
21 | }
22 |
--------------------------------------------------------------------------------
/frontend/src/containers/project-explorer.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-console */
2 | import { connect } from 'react-redux'
3 | import ExploreProjectsPage from '../components/areas/public/features/explore/pages/explore-projects-page'
4 | import { listProjects } from '../actions/projectActions'
5 |
6 | const mapStateToProps = (state) => ({
7 | projects: state.projects
8 | })
9 |
10 | const mapDispatchToProps = (dispatch, ownProps) => {
11 | return {
12 | listProjects: () => dispatch(listProjects())
13 | }
14 | }
15 |
16 | export default connect(mapStateToProps, mapDispatchToProps)(ExploreProjectsPage)
17 |
--------------------------------------------------------------------------------
/src/app/routes/organization.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const router = express.Router()
3 | require('passport')
4 | require('../../modules/authenticationHelpers')
5 | require('../../models')
6 | const controllers = require('../controllers/organization')
7 |
8 | router.get('/list', controllers.listOrganizations)
9 | router.get('/fetch/:id', controllers.fetchOrganization)
10 | const secure = require('./secure')
11 |
12 | router.use(secure)
13 | router.post('/create', controllers.createOrganization)
14 | router.put('/update', controllers.updateOrganization)
15 |
16 | module.exports = router
17 |
--------------------------------------------------------------------------------
/src/modules/assigns/assignExists.js:
--------------------------------------------------------------------------------
1 | const models = require('../../models')
2 | const Promise = require('bluebird')
3 |
4 | module.exports = Promise.method(function assignExists(assignAttributes) {
5 | return models.Assign.findOne({
6 | where: {
7 | userId: assignAttributes.userId,
8 | TaskId: assignAttributes.taskId
9 | }
10 | })
11 | .then((assign) => {
12 | if (!assign) return false
13 | return assign
14 | })
15 | .catch((error) => {
16 | // eslint-disable-next-line no-console
17 | console.log(error)
18 | throw error
19 | })
20 | })
21 |
--------------------------------------------------------------------------------
/src/modules/walletOrders/walletOrderList.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(async function walletListOrder(params) {
5 | const wallet =
6 | params.walletId &&
7 | (await models.Wallet.findOne({
8 | where: {
9 | id: params.walletId
10 | }
11 | }))
12 |
13 | if (!wallet) {
14 | return { error: 'No valid wallet' }
15 | }
16 |
17 | return models.WalletOrder.findAll({
18 | where: {
19 | walletId: wallet.id
20 | },
21 | order: [['id', 'DESC']]
22 | })
23 | })
24 |
--------------------------------------------------------------------------------
/frontend/src/containers/info.js:
--------------------------------------------------------------------------------
1 | import { connect } from 'react-redux'
2 | import Info from '../components/areas/public/features/welcome/components/Info'
3 | import { info } from '../actions/infoActions'
4 |
5 | const mapStateToProps = (state, ownProps) => {
6 | return {
7 | tasks: state.info.data.tasks,
8 | bounties: state.info.data.bounties,
9 | users: state.info.data.users
10 | }
11 | }
12 |
13 | const mapDispatchToProps = (dispatch, ownProps) => {
14 | return {
15 | info: () => dispatch(info())
16 | }
17 | }
18 |
19 | export default connect(mapStateToProps, mapDispatchToProps)(Info)
20 |
--------------------------------------------------------------------------------
/frontend/src/stories/Header.stories.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | import { Header } from './Header'
4 |
5 | export default {
6 | title: 'Example/Header',
7 | component: Header,
8 | parameters: {
9 | // More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
10 | layout: 'fullscreen'
11 | }
12 | }
13 |
14 | const Template = (args) =>
15 |
16 | export const LoggedIn = Template.bind({})
17 | LoggedIn.args = {
18 | user: {
19 | name: 'Jane Doe'
20 | }
21 | }
22 |
23 | export const LoggedOut = Template.bind({})
24 | LoggedOut.args = {}
25 |
--------------------------------------------------------------------------------
/src/modules/orders/orderFetch.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(function orderFetch(orderParams) {
5 | return models.Order.findOne({ where: { id: orderParams.id }, include: models.User })
6 | .then(async (data) => {
7 | return {
8 | source_id: data.source_id,
9 | currency: data.currency,
10 | amount: data.amount
11 | }
12 | })
13 | .catch((error) => {
14 | // eslint-disable-next-line no-console
15 | console.log(error)
16 | return false
17 | })
18 | })
19 |
--------------------------------------------------------------------------------
/src/modules/tasks/taskSolutionGet.js:
--------------------------------------------------------------------------------
1 | const Promise = require('bluebird')
2 | const models = require('../../models')
3 |
4 | module.exports = Promise.method(function taskSolutionGet(taskId, userId) {
5 | return models.TaskSolution.findOne({
6 | where: { taskId: taskId, userId: userId }
7 | })
8 | .then((data) => {
9 | if (!data) {
10 | return {}
11 | }
12 |
13 | return data
14 | })
15 | .catch((err) => {
16 | // eslint-disable-next-line no-console
17 | console.log(err)
18 |
19 | throw new Error('COULD_NOT_GET_TASK_SOLUTION')
20 | })
21 | })
22 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/base/created-field/created-field.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { useIntl } from 'react-intl'
3 | import MomentComponent from 'moment'
4 |
5 | import messages from '../../../../../../../../messages/messages'
6 |
7 | const CreatedField = ({ createdAt }) => {
8 | const intl = useIntl()
9 | return (
10 |
11 | {createdAt ? MomentComponent(createdAt).fromNow() : intl.formatMessage(messages.noDefined)}
12 |
13 | )
14 | }
15 |
16 | export default CreatedField
17 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/public/features/profile/pages/profile-page.tsx:
--------------------------------------------------------------------------------
1 | import UserProfilePublicPage from 'design-library/pages/public-pages/user-profile-public-page/user-profile-public-page'
2 | import React from 'react'
3 | import { useParams } from 'react-router-dom'
4 |
5 | const ProfilePage = ({ user, searchUser, tasks, listTasks, filterTasks }) => {
6 | return (
7 |
14 | )
15 | }
16 |
17 | export default ProfilePage
18 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/content/issue-content/issue-content-placeholder.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Skeleton, Stack } from '@mui/material'
3 |
4 | const IssueContentPlaceholder = () => {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 |
12 | )
13 | }
14 | export default IssueContentPlaceholder
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/lists/project-list/project-list-full/project-list-full.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Container } from '@mui/material'
3 | import ProjectCard from '../../../cards/project-card/project-card'
4 |
5 | export const StyledContainer = styled(Container)(({ theme }) => ({
6 | backgroundColor: (theme as any).palette?.background?.dark,
7 | minHeight: '100%',
8 | paddingBottom: theme.spacing(3),
9 | paddingTop: theme.spacing(3)
10 | }))
11 |
12 | export const StyledProjectCard = styled(ProjectCard as any)({
13 | height: '100%'
14 | })
15 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/private/features/account/features/account-skills/my-skill.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Avatar, Chip } from '@mui/material'
3 | import { SkillIcon } from './skill-icon'
4 |
5 | const MySkill = (props) => {
6 | const { title, onDelete } = props
7 |
8 | return (
9 |
12 |
13 |
14 | }
15 | label={title}
16 | onDelete={onDelete}
17 | style={{ marginRight: 5, justifyContent: 'space-between' }}
18 | />
19 | )
20 | }
21 |
22 | export default MySkill
23 |
--------------------------------------------------------------------------------
/frontend/src/components/areas/private/features/payout-settings/pages/payout-settings-paypal-page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PayoutSettingsPaypal from 'design-library/pages/private-pages/settings-pages/payout-settings-paypal/payout-settings-paypal'
3 |
4 | const PayoutSettingsPaypalPage = ({ user, updateUser }) => {
5 | const handlePaypalAccount = (e) => {
6 | e.preventDefault()
7 | updateUser({
8 | paypal_id: e.target.paypal_email.value
9 | })
10 | }
11 |
12 | return
13 | }
14 | export default PayoutSettingsPaypalPage
15 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/content/issue-content/issue-content.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Typography } from '@mui/material'
3 |
4 | export const DescriptionHeading = styled(Typography)(({ theme }) => ({
5 | marginBottom: 10,
6 | marginTop: 20
7 | }))
8 |
9 | export const IssueContentText = styled(Typography)(({ theme }) => ({
10 | marginBottom: 40,
11 | wordBreak: 'break-word',
12 | overflowWrap: 'break-word',
13 | '& a': {
14 | wordBreak: 'break-all'
15 | },
16 | '& img': {
17 | maxWidth: '100%',
18 | height: 'auto'
19 | }
20 | }))
21 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/dialogs/bottom-section-dialog/bottom-section-dialog.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import BottomSectionDialog from './bottom-section-dialog'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Dialogs/BottomSectionDialog',
6 | component: BottomSectionDialog
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | header: 'header section',
15 | title: 'title',
16 | subtitle: 'subtitle',
17 | content: 'content'
18 | }
19 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/form-section/personal-details-form/personal-details.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PersonalDetailsForm from './personal-details-form'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/FormSection/PersonalDetailsForm',
6 | component: PersonalDetailsForm
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | account: {
14 | completed: true,
15 | data: {
16 | first_name: 'John',
17 | last_name: 'Doe'
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/modules/paymentRequestsTransfers/paymentRequestsTransferList.js:
--------------------------------------------------------------------------------
1 | const models = require('../../models')
2 |
3 | module.exports = async function paymentRequestTransferList(paymentRequestTransferParams) {
4 | const paymentRequestTransferList = await models.PaymentRequestTransfer.findAll({
5 | where: {
6 | userId: paymentRequestTransferParams.userId
7 | },
8 | order: [['createdAt', 'DESC']],
9 | include: [
10 | {
11 | model: models.User
12 | },
13 | {
14 | model: models.PaymentRequest
15 | }
16 | ]
17 | })
18 | return paymentRequestTransferList
19 | }
20 |
--------------------------------------------------------------------------------
/.devcontainer/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.8'
2 | services:
3 | app:
4 | build:
5 | context: ..
6 | dockerfile: .devcontainer/Dockerfile
7 | volumes:
8 | - ..:/workspace:cached
9 | command: sleep infinity
10 | network_mode: service:db
11 |
12 | db:
13 | image: postgres:latest
14 | restart: unless-stopped
15 | environment:
16 | POSTGRES_USER: postgres
17 | POSTGRES_PASSWORD: postgres
18 | POSTGRES_DB: mydatabase
19 | ports:
20 | - "5432:5432"
21 | volumes:
22 | - postgres-data:/var/lib/postgresql/data
23 |
24 | volumes:
25 | postgres-data:
26 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/alerts/simple-info/simple-info.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 |
3 | export const SimpleInfoRoot = styled('div')(({ theme }) => ({
4 | paddingBottom: 10,
5 | display: 'flex',
6 | alignItems: 'center'
7 | }))
8 |
9 | export const IconCenter = styled('span')(({ theme }) => ({
10 | verticalAlign: 'middle',
11 | paddingRight: 5,
12 | color: theme.palette.action.active
13 | }))
14 |
15 | export const Text = styled('p')(({ theme }) => ({
16 | color: theme.palette.text.secondary,
17 | marginTop: 5,
18 | fontSize: 11,
19 | marginBottom: 0
20 | }))
21 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/atoms/inputs/radios/radios.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Radios from './radios'
3 |
4 | const options = [
5 | { label: 'Option 1', value: '1' },
6 | { label: 'Option 2', value: '2' },
7 | { label: 'Option 3', value: '3' }
8 | ]
9 |
10 | export default {
11 | title: 'Design Library/Atoms/Inputs/Radios',
12 | component: Radios
13 | }
14 |
15 | export const Default = {
16 | render: (args) => {
17 | return {}} />
18 | },
19 | args: {
20 | name: 'example-radios'
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/issue/issue-created-field/issue-created-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import IssueCreatedField from './issue-created-field'
3 |
4 | export default {
5 | title: 'Design Library/Molecules/Tables/Fields/Issue/IssueCreatedField',
6 | component: IssueCreatedField
7 | }
8 |
9 | const Template = (args) =>
10 |
11 | export const Default = Template.bind({})
12 | Default.args = {
13 | // Add default props here
14 | issue: {
15 | createdAt: '2021-07-01T00:00:00.000Z'
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/tables/section-table/section-table-custom-fields/payment-request/payment-request-active-field/payment-request-active-field.stories.tsx:
--------------------------------------------------------------------------------
1 | import PaymentRequestActiveField from './payment-request-active-field'
2 |
3 | const meta = {
4 | title: 'Design Library/Molecules/Tables/Fields/PaymentRequest/PaymentRequestActiveField',
5 | component: PaymentRequestActiveField,
6 | args: {
7 | status: 'open'
8 | }
9 | }
10 |
11 | export const Yes = {
12 | args: {
13 | status: 'Yes'
14 | }
15 | }
16 |
17 | export const No = {
18 | args: {
19 | status: 'No'
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/models/projectProgrammingLanguage.js:
--------------------------------------------------------------------------------
1 | module.exports = (sequelize, DataTypes) => {
2 | const ProjectProgrammingLanguage = sequelize.define('ProjectProgrammingLanguage', {
3 | projectId: {
4 | type: DataTypes.INTEGER,
5 | allowNull: false,
6 | references: {
7 | model: 'Projects',
8 | key: 'id'
9 | }
10 | },
11 | programmingLanguageId: {
12 | type: DataTypes.INTEGER,
13 | allowNull: false,
14 | references: {
15 | model: 'ProgrammingLanguages',
16 | key: 'id'
17 | }
18 | }
19 | })
20 |
21 | return ProjectProgrammingLanguage
22 | }
23 |
--------------------------------------------------------------------------------
/frontend/.storybook/utils/generateTableData.ts:
--------------------------------------------------------------------------------
1 | type TableRow = {
2 | id: number
3 | name: string
4 | email: string
5 | role: string
6 | status: string
7 | action: string
8 | other: string
9 | }
10 |
11 | export const generateTableData = (count: number): TableRow[] => {
12 | const data: TableRow[] = []
13 | for (let i = 0; i < count; i++) {
14 | data.push({
15 | id: i + 1,
16 | name: `John Doe ${i + 1}`,
17 | email: `john${i}@gmail.com`,
18 | role: 'Contributor',
19 | status: 'Active',
20 | action: 'Edit',
21 | other: 'Other'
22 | })
23 | }
24 | return data
25 | }
26 |
--------------------------------------------------------------------------------
/frontend/src/components/design-library/molecules/cards/balance-card/balance-card.styles.ts:
--------------------------------------------------------------------------------
1 | import { styled } from '@mui/material/styles'
2 | import { Card as MuiCard, Typography as MuiTypography } from '@mui/material'
3 |
4 | export const RootCard = styled(MuiCard)(({ theme }) => ({
5 | maxWidth: 500,
6 | margin: 10,
7 | textAlign: 'right',
8 | padding: 10
9 | }))
10 |
11 | export const Balance = styled(MuiTypography)(() => ({
12 | fontSize: 32,
13 | fontWeight: 'bold'
14 | }))
15 |
16 | export const Name = styled(MuiTypography)(() => ({
17 | fontSize: 18
18 | }))
19 |
20 | export default { RootCard, Balance, Name }
21 |
--------------------------------------------------------------------------------