The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package SQL::Translator::Filter::AutoCRUD::ExtJSxType;
{
  $SQL::Translator::Filter::AutoCRUD::ExtJSxType::VERSION = '2.143070';
}

use strict;
use warnings;

my %xtype_for = (
    boolean => 'checkbox',
);

$xtype_for{$_} = 'numberfield' for (
    'bigint',
    'bigserial',
    'dec',
    'decimal',
    'double precision',
    'float',
    'int',
    'integer',
    'mediumint',
    'money',
    'numeric',
    'real',
    'smallint',
    'serial',
    'tinyint',
    'year',
);

$xtype_for{$_} = 'timefield' for (
    'time',
    'time without time zone',
    'time with time zone',
);

$xtype_for{$_} = 'datefield' for (
    'date',
);

$xtype_for{$_} = 'xdatetime' for (
    'datetime',
    'timestamp',
    'timestamp without time zone',
    'timestamp with time zone',
);

sub filter {
    my ($schema, @args) = @_;

    foreach my $tbl ($schema->get_tables) {
        # set extjs_xtype on fieldumns
        foreach my $field ($tbl->get_fields) {
            if (exists $xtype_for{ lc $field->data_type }) {
                $field->extra(extjs_xtype => $xtype_for{ lc $field->data_type });
            }
            elsif (scalar $field->size <= 40) {
                $field->extra(extjs_xtype => 'textfield');
            }
            else {
                $field->extra(extjs_xtype => 'textarea');
            }
        }
    }
}

1;