/** commom modules */
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { NgbModule, NgbDropdownModule, NgbCollapseModule, NgbModalConfig, NgbModal, NgbActiveModal, NgbDateParserFormatter} from '@ng-bootstrap/ng-bootstrap';
import { AutoCompleteModule } from 'primeng/autocomplete';

/** Pipes */
import { CapitalizeEachPipe } from '../filters/capitalize-each.pipe';
import { OrdinalPipe } from '../filters/ordinal.pipe';
import { DateToISOPipe } from '../filters/date-to-iso.pipe';
import { DetectApostrophePipe } from '../filters/detect-apostrophe.pipe';
import { FilterEncodedPipe } from '../filters/filter-encoded.pipe';
import { FilterMessagesPipe } from '../filters/filter-messages.pipe';
import { ReplaceWithBlankPipe } from '../filters/replace-with-blank.pipe';
import { StripDashPipe } from '../filters/strip-dash.pipe';
import { StripNDCPipe } from '../filters/strip-ndc.pipe';
import { StrTimeChartPipe } from '../filters/str-time-chart.pipe';
import { TimePipe } from '../filters/time.pipe';
import { SafeHtmlPipe } from '../filters/safe-html.pipe';
import { RangePipe } from '../filters/range.pipe';
import { TimezonePipe } from '../filters/timezone.pipe';
import { ObjectToArrayPipe } from '../filters/object-to-array.pipe';
import { ChangeProductNamePipe } from '../filters/change-product-name.pipe';
import { SortSuppliersByCutoffTimePipe } from '../filters/sort-suppliers-by-cutoff-time.pipe';
import { PreferredPaymentMethodPipe } from '../filters/preferred-payment-method.pipe';
/** Shared Directives */
import { HeaderComponent } from '../feature-modules/header/header.component';
import { FooterComponent } from '../components/footer/footer.component';
import { SupplierInfoComponent } from '../components/supplier-info/supplier-info.component';
import { RegistrationStatusHeaderComponent } from '../components/registration-status-header/registration-status-header.component';
import { BannerComponent } from '../components/banner/banner.component';
import { StatusMsgComponent } from '../components/status-msg/status-msg.component';
import { UploadDocumentComponent } from '../components/upload-document/upload-document.component';
import { QuickCartComponent } from '../components/quick-cart/quick-cart.component';
import { SearchFormComponent } from '../components/search-form/search-form.component';
import { TypeaheadComponent } from '../components/search-form/typeahead/typeahead.component';
import { ContentComponent } from '../components/content/content.component';
import { LoadingStatusComponent } from '../components/loading-status/loading-status.component';
import { AdvancedFilterComponent } from '../components/advanced-filter/advanced-filter.component';
import { AlphabetSearchComponent } from '../components/alphabet-search/alphabet-search.component';
import { AnalyticsComponent } from '../components/analytics/analytics.component';
import { BaseModalComponent } from '../components/base-modal/base-modal.component';
import { CompileComponent } from '../components/compile/compile.component';
import { CutoffTimeComponent } from '../components/cutoff-time/cutoff-time.component';
import { DetectOverflowTooltipComponent } from '../components/detect-overflow-tooltip/detect-overflow-tooltip.component';
import { DocumentComponent } from '../components/document/document.component';
import { DocumentMainSettingsComponent } from '../components/document-main-settings/document-main-settings.component';
import { EstimatedDeliveryTimeComponent } from '../components/estimated-delivery-time/estimated-delivery-time.component';
import { AccountSuspendedComponent } from '../feature-modules/header/account-suspended/account-suspended.component';
import { TaxExemptMessageComponent } from '../feature-modules/header/tax-exempt-message/tax-exempt-message.component';
import { CheckoutmessageComponent } from '../feature-modules/header/checkoutmessage/checkoutmessage.component';
import { HundredSearchNotifyComponent } from '../feature-modules/header/hundred-search-notify/hundred-search-notify.component';
import { PharmacyPopUpMessageComponent } from '../feature-modules/header/pharmacy-pop-up-message/pharmacy-pop-up-message.component';
import { TwoHundredSearchNotifyComponent } from '../feature-modules/header/two-hundred-search-notify/two-hundred-search-notify.component';
import { VawdMessagePopUpComponent } from '../feature-modules/header/vawd-message-pop-up/vawd-message-pop-up.component';
import { LoadingmodalComponent } from '../components/loadingmodal/loadingmodal.component';
import { WrittenmodalComponent } from '../components/writtenmodal/writtenmodal.component';
import { NgbCarouselModule } from '@ng-bootstrap/ng-bootstrap';
import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
import { HelloSignThankYouComponent } from '../components/hello-sign-thank-you/hello-sign-thank-you.component';
import { ShippingOptionComponent } from '../components/shipping-option/shipping-option.component';
import { LessquantityComponent } from '../components/lessquantity/lessquantity.component';
import { PackageDescriptionComponent } from '../components/package-description/package-description.component';
import { NotificationComponent } from '../components/notification/notification.component';
import { ProductImageComponent } from '../components/product-image/product-image.component';
import { AdrComponent } from '../components/adr/adr.component';
import { RebateComponent } from '../components/rebate/rebate.component';
import { GroupNotificationComponent } from '../components/group-notification/group-notification.component';
import { ControlRatioSettingsComponent } from '../components/control-ratio-settings/control-ratio-settings.component';
import { PedigreeInfoComponent } from '../components/pedigree-info/pedigree-info.component';
import { CaptchaComponent } from '../components/captcha/captcha.component';
import { AuthStatesComponent } from '../components/auth-states/auth-states.component';
import { ShippingSettingsDisplayComponent } from '../components/shipping-settings-display/shipping-settings-display.component';
import { ProductUploadStatusHeaderComponent } from '../components/product-upload-status-header/product-upload-status-header.component';
import { SupplierDetailsDisplayComponent } from '../components/cart/supplier-details-display/supplier-details-display.component';
import { SupplierItemsDisplayComponent } from '../components/cart/supplier-items-display/supplier-items-display.component';
import { SupplierItemsFooterComponent } from '../components/cart/supplier-items-footer/supplier-items-footer.component';
import { ChangeSupplierComponent } from '../components/cart/change-supplier/change-supplier.component';
import { VawdComponent } from '../components/cart/vawd/vawd.component';
import { MessagesComponent } from '../components/cart/messages/messages.component';
import { MinimumquantitynoticeComponent } from '../components/cart/place-order-popup/minimumquantitynotice/minimumquantitynotice.component';
import { ShowpricechangeComponent } from '../components/cart/place-order-popup/showpricechange/showpricechange.component';
import { ShownotificationacceptanceComponent } from '../components/cart/place-order-popup/shownotificationacceptance/shownotificationacceptance.component';
import { CheckoutErrorsComponent } from '../components/cart/place-order-popup/checkouterrors/checkouterrors.component';
import { CreditholdComponent } from '../components/cart/place-order-popup/credithold/credithold.component';
import { CartrefreshComponent } from '../components/cart/place-order-popup/cartrefresh/cartrefresh.component';
import { SpecialshippingnotificationComponent } from '../components/cart/place-order-popup/specialshippingnotification/specialshippingnotification.component';
import { OutofstockComponent } from '../components/cart/place-order-popup/outofstock/outofstock.component';
import { ProductshortageComponent } from '../components/cart/place-order-popup/productshortage/productshortage.component';
import { CartconfirmationComponent } from '../components/cart/place-order-popup/cartconfirmation/cartconfirmation.component';
import { FirstordernoticeComponent } from '../components/cart/place-order-popup/firstordernotice/firstordernotice.component';
import { CartratioComponent } from '../components/cart/place-order-popup/cartratio/cartratio.component';
import { SupplierRecommendedProductsComponent } from '../components/cart/supplier-recommended-products/supplier-recommended-products.component';
import { ProductLessQuantityPopupComponent } from '../components/cart/product-less-quantity-popup/product-less-quantity-popup.component';
import { RemoveAllProductsComponent } from '../components/cart/remove-all-products/remove-all-products.component';
import { ErrorMessageComponent } from '../components/cart/error-message/error-message.component';
import { EtaItemsDisplayComponent } from '../components/cart/eta-items-display/eta-items-display.component';
import { ThankyouComponent } from '../components/thankyou/thankyou.component';
import { ProductRequestFormComponent } from '../components/product-request-form/product-request-form.component';
import { NovaPaginationComponent } from '../components/nova-pagination/nova-pagination.component';
import { ProductTableComponent } from '../components/product-table/product-table.component';
import { AddToCartComponent } from '../components/add-to-cart/add-to-cart.component';
import { LessqtnmodalComponent } from '../components/add-to-cart/modals/lessqtnmodal/lessqtnmodal.component';
import { FavoritesLimitReachedModalComponent } from '../components/add-to-cart/modals/favorites-limit-reached-modal/favorites-limit-reached-modal.component';
import { RefrigeratedComponent } from '../components/add-to-cart/modals/refrigerated/refrigerated.component';
import { NondcmodalComponent } from '../components/add-to-cart/modals/nondcmodal/nondcmodal.component';
import { ProductTableRowGroupingComponent } from '../components/product-table-row-grouping/product-table-row-grouping.component';
import { SuggestiveSectionComponent } from '../components/suggestive-section/suggestive-section.component';
import { AuthStateLicenseUploadModalComponent } from '../components/auth-states/auth-state-licnese-upload-modal/auth-state-license-upload-modal.component';
import { QuickSurveyQuestionPopupComponent } from '../feature-modules/header/quick-survey-question-popup/quick-survey-question-popup.component';
import { AddedToCartMsgModalComponent } from '../components/add-to-cart/modals/added-to-cart-msg-modal/added-to-cart-msg-modal.component';
import { StripePaymentModelComponent } from '../components/stripe-payment-model/stripe-payment-model.component';
import { ProductDetailsDisplayComponent } from '../components/product-details-display/product-details-display.component';
import { ReviewOrderComponent } from '../components/cart/place-order-popup/review-order/review-order.component';
import { EditPaymentMethodModalComponent } from '../components/edit-payment-method-modal/edit-payment-method-modal.component';
import { AlmostThereComponent } from '../components/cart/place-order-popup/almost-there/almost-there.component';
/** Directives */
import { BackImageDirective } from '../directives/back-image.directive';
import { OptInPopUpComponent } from '../feature-modules/header/opt-in-pop-up/opt-in-pop-up.component';
import { DetectOverflowTooltipDirective } from '../directives/detect-overflow-tooltip.directive';
import { UppercaseDirective } from '../directives/uppercase.directive';

import { CustomNgbDateFormatterService } from '../services/CustomNgbDateFormatter/custom-ngb-date-formatter.service';
import { TableModule } from 'primeng/table';
import { TooltipModule } from 'primeng/tooltip';
import { PopoverModule } from 'primeng/popover';
import { DatePickerModule } from 'primeng/datepicker'

@NgModule({
  imports: [
    CommonModule, 
    RouterModule,
    FormsModule,
    HttpClientModule,
    ReactiveFormsModule,
    NgbModule,
    NgbDropdownModule,
    NgbCollapseModule,
    NgbCarouselModule,
    NgbPopoverModule,
    TableModule,
    TooltipModule,
    PopoverModule,
    DatePickerModule,
    AutoCompleteModule
  ],
  declarations: [
    CapitalizeEachPipe,
    OrdinalPipe,
    DateToISOPipe,
    DetectApostrophePipe,
    FilterEncodedPipe,
    FilterMessagesPipe,
    ReplaceWithBlankPipe,
    StripDashPipe,
    StripNDCPipe,
    StrTimeChartPipe,
    TimePipe,
    SafeHtmlPipe,
    RangePipe,
    TimezonePipe,
    ObjectToArrayPipe,
    ChangeProductNamePipe,
    SortSuppliersByCutoffTimePipe,
    PreferredPaymentMethodPipe,
    
    HeaderComponent,
    SupplierInfoComponent,
    FooterComponent,
    RegistrationStatusHeaderComponent,
    BannerComponent,
    StatusMsgComponent,
    UploadDocumentComponent,
    QuickCartComponent,
    SearchFormComponent,
    TypeaheadComponent,
    ContentComponent,
    LoadingStatusComponent,
    AdvancedFilterComponent,
    AlphabetSearchComponent,
    AnalyticsComponent,
    BaseModalComponent,
    CompileComponent,
    CutoffTimeComponent,
    DetectOverflowTooltipComponent,
    DocumentComponent,
    DocumentMainSettingsComponent,
    EstimatedDeliveryTimeComponent,
    AccountSuspendedComponent,
    TaxExemptMessageComponent,
    CheckoutmessageComponent,
    HundredSearchNotifyComponent,
    PharmacyPopUpMessageComponent,
    TwoHundredSearchNotifyComponent,
    VawdMessagePopUpComponent,
    LoadingmodalComponent,
    WrittenmodalComponent,
    HelloSignThankYouComponent,
    ShippingOptionComponent,
    LessquantityComponent,
    PackageDescriptionComponent,
    NotificationComponent,
    ProductImageComponent,
    AdrComponent,
    RebateComponent,
    GroupNotificationComponent,
    ControlRatioSettingsComponent,
    PedigreeInfoComponent,
    CaptchaComponent,
    AuthStatesComponent,
    ShippingSettingsDisplayComponent,
    ProductUploadStatusHeaderComponent,
    SupplierDetailsDisplayComponent,
    SupplierItemsDisplayComponent,
    SupplierItemsFooterComponent,
    ChangeSupplierComponent,
    VawdComponent,
    MessagesComponent,
    MinimumquantitynoticeComponent,
    ShowpricechangeComponent,
    ShownotificationacceptanceComponent,
    CheckoutErrorsComponent,
    CreditholdComponent,
    CartrefreshComponent,
    SpecialshippingnotificationComponent,
    OutofstockComponent,
    ProductshortageComponent,
    CartconfirmationComponent,
    FirstordernoticeComponent,
    CartratioComponent,
    SupplierRecommendedProductsComponent,
    ProductLessQuantityPopupComponent,
    RemoveAllProductsComponent,
    ErrorMessageComponent,
    EtaItemsDisplayComponent,
    ThankyouComponent,
    ProductRequestFormComponent,
    NovaPaginationComponent,
    ProductTableComponent,
    AddToCartComponent,
    LessqtnmodalComponent,
    FavoritesLimitReachedModalComponent,
    RefrigeratedComponent,
    NondcmodalComponent,
    AuthStateLicenseUploadModalComponent,
    ProductTableRowGroupingComponent,
    SuggestiveSectionComponent,
    OptInPopUpComponent,
    BackImageDirective,
    DetectOverflowTooltipDirective,
    QuickSurveyQuestionPopupComponent,
    AddedToCartMsgModalComponent,
    StripePaymentModelComponent,
    ProductDetailsDisplayComponent,
    ReviewOrderComponent,
    EditPaymentMethodModalComponent,
    UppercaseDirective,
    AlmostThereComponent
  ],
  exports: [
    CommonModule,
    RouterModule,
    FormsModule,
    HttpClientModule,
    ReactiveFormsModule,
    NgbModule,
    NgbCollapseModule,
    NgbPopoverModule,
    CapitalizeEachPipe,
    OrdinalPipe,
    DateToISOPipe,
    DetectApostrophePipe,
    FilterEncodedPipe,
    FilterMessagesPipe,
    ReplaceWithBlankPipe,
    StripDashPipe,
    StripNDCPipe,
    StrTimeChartPipe,
    TimePipe,
    SafeHtmlPipe,
    TimezonePipe,
    RangePipe,
    ObjectToArrayPipe,
    ChangeProductNamePipe,
    SortSuppliersByCutoffTimePipe,
    PreferredPaymentMethodPipe,
    
    HeaderComponent,
    SupplierInfoComponent,
    FooterComponent,
    RegistrationStatusHeaderComponent,
    BannerComponent,
    StatusMsgComponent,
    UploadDocumentComponent,
    QuickCartComponent,
    SearchFormComponent,
    TypeaheadComponent,
    ContentComponent,
    LoadingStatusComponent,
    AdvancedFilterComponent,
    AlphabetSearchComponent,
    AnalyticsComponent,
    BaseModalComponent,
    CompileComponent,
    CutoffTimeComponent,
    DetectOverflowTooltipComponent,
    DocumentComponent,
    DocumentMainSettingsComponent,
    EstimatedDeliveryTimeComponent,
    AccountSuspendedComponent,
    TaxExemptMessageComponent,
    CheckoutmessageComponent,
    HundredSearchNotifyComponent,
    PharmacyPopUpMessageComponent,
    TwoHundredSearchNotifyComponent,
    VawdMessagePopUpComponent,
    WrittenmodalComponent,
    LoadingmodalComponent,
    HelloSignThankYouComponent,
    ShippingOptionComponent,
    LessquantityComponent,
    PackageDescriptionComponent,
    NotificationComponent,
    ProductImageComponent,
    AdrComponent,
    RebateComponent,
    GroupNotificationComponent,
    ControlRatioSettingsComponent,
    PedigreeInfoComponent,
    CaptchaComponent,
    AuthStatesComponent,
    ShippingSettingsDisplayComponent,
    ProductUploadStatusHeaderComponent,
    SupplierDetailsDisplayComponent,
    SupplierItemsDisplayComponent,
    SupplierItemsFooterComponent,
    ChangeSupplierComponent,
    VawdComponent,
    MessagesComponent,
    MinimumquantitynoticeComponent,
    ShowpricechangeComponent,
    ShownotificationacceptanceComponent,
    CheckoutErrorsComponent,
    CreditholdComponent,
    CartrefreshComponent,
    SpecialshippingnotificationComponent,
    OutofstockComponent,
    ProductshortageComponent,
    CartconfirmationComponent,
    FirstordernoticeComponent,
    CartratioComponent,
    SupplierRecommendedProductsComponent,
    ProductLessQuantityPopupComponent,
    RemoveAllProductsComponent,
    ErrorMessageComponent,
    EtaItemsDisplayComponent,
    ThankyouComponent,
    ProductRequestFormComponent,
    NovaPaginationComponent,
    ProductTableComponent,
    AddToCartComponent,
    LessqtnmodalComponent,
    FavoritesLimitReachedModalComponent,
    RefrigeratedComponent,
    NondcmodalComponent,
    AuthStateLicenseUploadModalComponent,
    ProductTableRowGroupingComponent,
    SuggestiveSectionComponent,
    OptInPopUpComponent,
    BackImageDirective,
    QuickSurveyQuestionPopupComponent,
    AddedToCartMsgModalComponent,
    StripePaymentModelComponent,
    ProductDetailsDisplayComponent,
    ReviewOrderComponent,
    EditPaymentMethodModalComponent,
    UppercaseDirective,
    AlmostThereComponent
  ],
  providers:[
    DetectApostrophePipe,
    StripDashPipe,
    StripNDCPipe,
    ChangeProductNamePipe,
    NgbModalConfig,
    NgbModal,
    NgbActiveModal,
    { provide: NgbDateParserFormatter, useClass: CustomNgbDateFormatterService }
  ]
})
export class SharedModule { }
