@analink/shared-functions

v2.1.0

Published

A comprehensive utility library for Angular applications providing base components, form utilities, date transformations, and more.

Readme

@analink/shared-functions

A comprehensive utility library for Angular applications providing base components, form utilities, date transformations, and more.

🚀 Features

  • Base Components: Unified base class for Angular components with automatic cleanup
  • Form Utilities: Comprehensive form manipulation and validation helpers
  • Date Utilities: Date formatting and validation functions
  • String Utilities: String manipulation and generation utilities
  • Port Utilities: Port data processing and grouping functions
  • RxJS Utilities: Observable subscription management
  • Mappers: Data transformation utilities

📦 Installation

npm install @analink/shared-functions

🔧 Usage

Base Components

The unified BaseComponent provides automatic cleanup for subscriptions and effects:

import { BaseComponent } from '@analink/shared-functions';

@Component({...})
export class MyComponent extends BaseComponent implements OnInit {
  ngOnInit() {
    // Reactive form subscriptions
    this.someObservable$
      .pipe(takeUntil(this.destroy$))
      .subscribe(value => {
        // handle value...
      });

    // Signal effects
    const effectRef = effect(() => {
      // effect logic
    });
    this.registerEffect(effectRef);
  }
}

Form Utilities

import { FormUtils } from '@analink/shared-functions';

// Format field values
const formatted = FormUtils.formatField('test', 10); // "test      "

// Concatenate form fields
const result = FormUtils.concatenateFormFields(form, [
  { key: 'field1', length: 10 },
  { key: 'field2', length: 20, transform: (value) => value.toUpperCase() },
]);

// Create address form group
const addressGroup = FormUtils.createAddressGroup({
  addressLine1: '123 Main St',
  city: 'New York',
});

Date Utilities

import { DateUtils } from '@analink/shared-functions';

// Transform date format
const transformed = DateUtils.transformDate('2024-01-15'); // "01152024"

// Format to DDMMM
const formatted = DateUtils.formatDateToDDMMM(new Date()); // "15JAN"

// Validate MMDDYYYY format
const isValid = DateUtils.isValidMmddyyyyDate('01152024'); // true

String Utilities

import { StringUtils } from '@analink/shared-functions';

// Generate random number
const random = StringUtils.generateRandomNumber(12); // "123456789012"

// Slice into chunks
const chunks = StringUtils.sliceIntoChunks('ABCDEFGHI', 3); // ["ABC", "DEF", "GHI"]

// Slice PGA flags
const flags = StringUtils.slicePgaFlags('ABC123DEF'); // ["ABC", "123", "DEF"]

Port Utilities

import { groupPortsByCategory, sortPortsByName } from '@analink/shared-functions';

// Group ports by category
const grouped = groupPortsByCategory(ports);

// Sort ports by name
const sorted = sortPortsByName(ports);

RxJS Utilities

import { subscribeWithCleanup } from '@analink/shared-functions';

// Subscribe with automatic cleanup
subscribeWithCleanup(this.someObservable$, this.destroy$, (data) => console.log('Received:', data));

🔄 Migration Guide

From Legacy Base Components

Before:

export class MyComponent extends BaseReactiveFormComponent {
  // ...
}

After:

export class MyComponent extends BaseComponent {
  // Same functionality, unified interface
}

From Individual Utility Functions

Before:

import { formatField, padFormControlValue } from '@analink/shared-functions';

After:

import { FormUtils } from '@analink/shared-functions';
// Use FormUtils.formatField() and FormUtils.padFormControlValue()

📋 API Reference

BaseComponent

  • destroy$: Subject<void> - Subject for takeUntil patterns
  • registerEffect(ref: EffectRef): void - Register effect for cleanup
  • ngOnDestroy(): void - Automatic cleanup implementation

FormUtils

  • formatField(fieldValue: unknown, maxLength: number): string
  • padFormControlValue(control: AbstractControl, maxLength: number): void
  • concatenateFormFields(form: FormGroup, fields: FieldConfig[], maxLength?: number): string
  • populatePartiesFromTemplate(form: FormGroup, formGroupName: string, parties: Record<string, unknown>, availablePartyKeys: string[]): void
  • createAddressGroup(address?: Record<string, unknown>): FormGroup

DateUtils

  • transformDate(date: string): string
  • formatDateToDDMMM(date: Date): string
  • isValidMmddyyyyDate(value: string): boolean

StringUtils

  • generateRandomNumber(digits: number): string
  • sliceIntoChunks(flags: string, chunkSize?: number): string[]
  • slicePgaFlags(flags: string): string[]

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

📄 License

This project is licensed under the MIT License.